Bazı durumlarda DATETIME biçimli değişkenimin değerine 1 gün eklemek istiyorum:
$start_date = date('Y-m-d H:i:s', strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}"));
Bunu yapmanın en iyi yolu nedir?
Yanıtlar:
Bunu PHP'de yapmak istiyorsanız:
// replace time() with the time stamp you want to add one day to
$startDate = time();
date('Y-m-d H:i:s', strtotime('+1 day', $startDate));
Tarihi MySQL'e eklemek istiyorsanız:
-- replace CURRENT_DATE with the date you want to add one day to
SELECT DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY);
time()
ile strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}")
.
Bunu PHP 5.2'de sunulan DateTime ile yapmanın birden fazla yolu vardır . strtotime()
Bunu kullanmanın aksine , yaz saati uygulaması ve artık yıl hesaba katılacaktır.
$datetime = new DateTime('2013-01-29');
$datetime->modify('+1 day');
echo $datetime->format('Y-m-d H:i:s');
// Available in PHP 5.3
$datetime = new DateTime('2013-01-29');
$datetime->add(new DateInterval('P1D'));
echo $datetime->format('Y-m-d H:i:s');
// Available in PHP 5.4
echo (new DateTime('2013-01-29'))->add(new DateInterval('P1D'))->format('Y-m-d H:i:s');
// Available in PHP 5.5
$start = new DateTimeImmutable('2013-01-29');
$datetime = $start->modify('+1 day');
echo $datetime->format('Y-m-d H:i:s');
+2 day
veya +2 days
(açıkça +2 days
anlamsal olarak daha doğrudur)
DateTime yapıcı bir parametre alır string time
. $time
farklı şeyler olabilir, datetime biçimine uyması gerekir .
Örnek olarak bazı geçerli değerler vardır:
'now'
(varsayılan değer)2017-10-19
2017-10-19 11:59:59
2017-10-19 +1day
Yani, sizin durumunuzda aşağıdakileri kullanabilirsiniz.
$dt = new \DateTime('now +1 day'); //Tomorrow
$dt = new \DateTime('2016-01-01 +1 day'); //2016-01-02
strtotime
Dizeyi bir zaman damgasına dönüştürmek için kullanınÖrneğin:
$time = strtotime($myInput);
$newTime = $time + 86400;
Yalnızca 1 gün ekliyorsa, strtotime'ı tekrar kullanmak muhtemelen abartılıdır.
date()
Yerel saat dilimi ile geri dönüşüm yapılırken , yaz saati uygulamasına dikkat edilecek olan dikkate alınır.
Zend Framework'ten Zend_Date sınıflarını kullanmaya başlamanızı öneririm . Biliyorum, biraz konu dışı, ama bu şekilde seveceğim :-)
$date = new Zend_Date();
$date->add('24:00:00', Zend_Date::TIMES);
print $date->get();
Aşağıdaki gibi kullanabilirsiniz.
$start_date = date('Y-m-d H:i:s');
$end_date = date("Y-m-d 23:59:59", strtotime('+3 days', strtotime($start_date)));
Ayrıca günleri sabit olarak ayarlayabilir ve aşağıdaki gibi kullanabilirsiniz.
if (!defined('ADD_DAYS')) define('ADD_DAYS','+3 days');
$end_date = date("Y-m-d 23:59:59", strtotime(ADD_DAYS, strtotime($start_date)));
Gün eklemek için sunucu istek süresini kullanma. Beklendiği gibi çalışıyor.
25/08/19 => 27/09/19
$timestamp = $_SERVER['REQUEST_TIME'];
$dateNow = date('d/m/y', $timestamp);
$newDate = date('d/m/y', strtotime('+2 day', $timestamp));
İstediğiniz sayıda gün eklemek için burada '+2 gün'.
Php tarihine gün eklemenin daha kısa ve sezgisel bir yolu var. Beni yanlış anlamayın, bu php ifadeleri harikadır, ama her zaman onları nasıl tedavi edeceğinizi Google'da araştırmalısınız. Bunun için otomatik tamamlama özelliğini özledim.
İşte bu davaları şu şekilde ele almaktan hoşlanıyorum:
(new Future(
new DateTimeFromISO8601String('2014-11-21T06:04:31.321987+00:00'),
new OneDay()
))
->value();
Benim için çok daha sezgisel ve otomatik tamamlama kutudan çıkar çıkmaz çalışıyor. Her seferinde çözüm için google'a gerek yok.
Güzel bir bonus olarak, elde edilen değeri biçimlendirme konusunda endişelenmenize gerek yok, zaten ISO8601 biçimindedir.
Bu beze kütüphanesi, burada daha fazla örnek var .