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.