PHP'de $ Date'e gün ekleme


216

Formda mySQL sorgusunun bir parçası olarak döndürülen bir tarih var 2010-09-17

$ Date2 değişkenlerini $ Date5 olarak aşağıdaki gibi ayarlamak istiyorum:

$Date2 = $Date + 1

$Date3 = $Date + 2

vb..

böylece geri döner 2010-09-18, 2010-09-19vb ...

denedim

date('Y-m-d', strtotime($Date. ' + 1 day'))

ama bu bana ÖNCE tarihi veriyor $Date.

Tarihlerimi başka bir sorguda kullanılabilmeleri için 'Ymd' biçiminde almanın doğru yolu nedir?


Yanıtlar:


447

Tek yapmanız gereken daysbunun yerine kullanmaktır day:

<?php
$Date = "2010-09-17";
echo date('Y-m-d', strtotime($Date. ' + 1 days'));
echo date('Y-m-d', strtotime($Date. ' + 2 days'));
?>

Ve doğru çıktı:

2010-09-18
2010-09-19

7
Aynı şekilde kullanarak doğru çıktı day... date("Y-m-d", strtotime('2010-09-17 + 1 day'))-> 2010-09-18, date("Y-m-d", strtotime('2010-09-17 + 2 day'))->2010-09-19
— Daniel Vandersluis

Sadece bu şekilde denedim ve işe yaradı. Başlangıçta denediğimde neden başlangıç ​​tarihimden bir gün önce bir değere sahip olduğum hakkında hala bir fikrim yok.
— Istari

Eklenecek gün sayısı için bir değişkenim olsaydı ne olurdu?
— Carlos Martins

3
@Carlos yankı tarihi ("Ymd", strtotime ($ Tarih. '+'. $ Değişken. 'Günler'));
— Pradeep Kumar Prabaharan

Hayır, bu yöntem hiç işe yaramıyor. 2004
— yılının bir

81

PHP 5.3 kullanıyorsanız, bir DateTimenesneyi ve addyöntemini kullanabilirsiniz:

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->add(new DateInterval('P1D')); // P1D means a period of 1 day
$Date2 = $date->format('Y-m-d');

Tarihinize eklemek için diğer dönemlerin nasıl oluşturulacağını görmek için DateIntervaloluşturucu el kitabına bir göz atın (2 gün olurdu 'P2D', 3 olurdu 'P3D', vb.).

PHP 5.3 olmadan, yaptığınız strtotimeşekilde kullanabilmeniz gerekir (test ettim ve hem 5.1.6 hem de 5.2.10'da çalışır):

$Date1 = '2010-09-17';
$Date2 = date('Y-m-d', strtotime($Date1 . " + 1 day"));
// var_dump($Date2) returns "2010-09-18"

Üzgünüm Daniel, ama web sunucusu php 5.2.6 çalıştırıyor, bu yüzden bu işe yaramaz
— Istari

2
DateTime::constructstrtotimetarihi ayrıştırmak için aynı mekanizmayı kullanır , bu nedenle new DateTime("+1 day $date")5.3 gerektirmeyen de yapabilirsiniz
— Gordon

Bunu küçümsemek istemedim, ama bir şekilde = /
— Steven

Bu php 5.5+ için gerçek cevap
— TheLegendaryCopyCoder

29

PHP 5.2'den itibaren bir DateTime nesnesiyle değiştirmeyi kullanabilirsiniz:

http://php.net/manual/en/datetime.modify.php

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->modify('+1 day');
$Date2 = $date->format('Y-m-d');

Ay eklerken dikkatli olun ... (ve daha az ölçüde, yıllar)


kabul edilen cevap sadece 25000+ gün eklediğinizde bu cevabın cevap verdiği 15000+ gün için cevap verir ..
— Pradeep Kumar Prabaharan

Bunu bir DateTimeImmutable () üzerinde de sorgulayabilir ve orijinali değiştirme riski olmadan değiştirilmiş bir kopyasını alabilirsiniz.
— Xavi Montero

17

Tarih değişikliklerini göstermek için küçük bir snippet:

$date = date("Y-m-d");
//increment 2 days
$mod_date = strtotime($date."+ 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//decrement 2 days
$mod_date = strtotime($date."- 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 month
$mod_date = strtotime($date."+ 1 months");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 year
$mod_date = strtotime($date."+ 1 years");
echo date("Y-m-d",$mod_date) . "\n";

Eğer [my ilgili (quesiton) görebilir miyim stackoverflow.com/q/61421783/8919244] ?
— Faysal

8

Aşağıdaki biçimi de kullanabilirsiniz

strtotime("-3 days", time());
strtotime("+1 day", strtotime($date));

Değişiklikleri şu şekilde yığınlayabilirsiniz:

strtotime("+1 day", strtotime("+1 year", strtotime($date)));

Yerine değerleri bitiştirme: Bu yaklaşım ve diğer yanıtlar arasındaki farkı Not +1 dayve <timestamp>sadece ikinci parametre olarak zaman damgası içinde geçebilir strtotime.


5

Gün sayısı için bir değişken kullanma

$myDate = "2014-01-16";
$nDays = 16;
$newDate = strtotime($myDate . '+ '.$nDays.'days');
echo newDate('d/m/Y', $soma); //format new date 

5

İşte sorgunuz için en basit çözüm

$date=date_create("2013-03-15"); // or your date string
date_add($date,date_interval_create_from_date_string("40 days"));// add number of days 
echo date_format($date,"Y-m-d"); //set date format of the result

2

İşte bunu çözmenin kolay bir yolu var.

<?php
   $date = "2015-11-17";
   echo date('Y-m-d', strtotime($date. ' + 5 days'));
?>

Çıktı:

2015-11-22

Çözüm burada bulundu - PHP'de Tarihe Gün Ekleme


0

Hepsi aşağıdaki kodu kullanmalıdır:

$nday = time() + ( 24 * 60 * 60);    
echo 'Now:       '. date('Y-m-d') ."\n";    
echo 'Next Day: '. date('Y-m-d', $nday) ."\n";

1
Bu şekilde yapmamalısınız, sonunda artık saniye ile ilgili sorunlarınız olacak
— Nathan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.