DATETIME biçim değerine 1 gün ekleme


88

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:


64

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);

bu bana şimdiki zamanı vermeyecek mi? yine de kullanıcının girdiği zamanı tutmam gerekiyor.
09:26 ian

Evet olacak ama özel saate hangi değerleri değiştirmeniz gerektiğini size işaretledim. Sadece yerini alabilir time()ile strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}").
RaYell

bu yaz / kış tasarrufu değildir! Lütfen DST kaydetme tarih / saat manipülasyonunu kullanın
steven

210

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');

Ah, bir döngü döngüsü .
Funk Forty Niner

9
Birden fazla gün eklerseniz, çoğul veya tekil kullanabilirsiniz ve aynı sonucu elde edebilirsiniz, örn: +2 dayveya +2 days(açıkça +2 daysanlamsal olarak daha doğrudur)
timhc22

Bu yöntemler arasındaki pratik farklar nelerdir? İlk örnek bana en basit ve en anlamsal geliyor.
BadHorsie

24

DateTime yapıcı bir parametre alır string time. $timefarklı ş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

3
Açıklama olmadan cevap mı veriyorsunuz? Oku İyi bir cevap yazmak nasıl?
Shashanth

11
  1. strtotimeDizeyi bir zaman damgasına dönüştürmek için kullanın
  2. Bir gün ekleyin (örneğin: 86400 saniye ekleyerek (24 * 60 * 60))

Örneğin:

$time = strtotime($myInput);
$newTime = $time + 86400;

Yalnızca 1 gün ekliyorsa, strtotime'ı tekrar kullanmak muhtemelen abartılıdır.


Yani onu bir TIMESTAMP'a ve ardından DATETIME formatına geri dönüştürmem gerekiyor?
ian

4
Sanırım her günün 24 saat sürmediği de unutulmamalıdır. Dünyanın çoğu yerinde gün ışığından yararlanma (yaz saati), yılda bir günün sadece 23 saat ve diğer bir günün 25 saat olduğu anlamına gelir.
nickf

Güç kaynağı. Bir tarih saati bir zaman damgasına dönüştürürsünüz, bu nedenle UTC tabanlıdır. Ve UTC günleri her zaman 24 saat uzunluğundadır. date()Yerel saat dilimi ile geri dönüşüm yapılırken , yaz saati uygulamasına dikkat edilecek olan dikkate alınır.
rabudde

5

Kullanabilirsiniz

$now = new DateTime();
$date = $now->modify('+1 day')->format('Y-m-d H:i:s');


1

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)));

0

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'.


0

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 .

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.