PHP, yarın tarihini tarihten alın


89

Şeklinde bir PHP tarihim var 2013-01-22ve yarın tarihini aynı biçimde almak istiyorum, örneğin 2013-01-23.

Bu PHP ile nasıl mümkün olabilir?

Yanıtlar:


211

DateTime kullanın

$datetime = new DateTime('tomorrow');
echo $datetime->format('Y-m-d H:i:s');

Veya:

$datetime = new DateTime('2013-01-22');
$datetime->modify('+1 day');
echo $datetime->format('Y-m-d H:i:s');

Veya:

$datetime = new DateTime('2013-01-22');
$datetime->add(new DateInterval("P1D"));
echo $datetime->format('Y-m-d H:i:s');

Veya PHP 5.4+ sürümlerinde:

echo (new DateTime('2013-01-22'))->add(new DateInterval("P1D"))
                                 ->format('Y-m-d H:i:s');

1
Bu akım kullanıyor, belirli bir tarihte geçmem gerekiyor.
Justin

74
 $tomorrow = date("Y-m-d", strtotime('tomorrow'));

veya

  $tomorrow = date("Y-m-d", strtotime("+1 day"));

Yardım Bağlantısı: STRTOTIME ()


1
Bunu kullandım ve tüm cevapların en kısa ve en basit hali, teşekkürler!
Bombelman

17

Bunu ile etiketlediğinden beri , bunu +1 daydeğiştirici ile şu şekilde kullanabilirsiniz :

$tomorrow_timestamp = strtotime('+1 day', strtotime('2013-01-22'));

Bununla birlikte, DateTime'ı kullanmak çok daha iyi bir çözüm .


14
<? php 

//1 Day = 24*60*60 = 86400

echo date("d-m-Y", time()+86400); 

?>

17
Bunun uç durumlarda (yaz saati uygulaması) başarısız olacağını unutmayın.
JJJ

Bu cevap yanlış. Bunu bir döngüde kullanan bir cronjob var ve sistem öldü.
jewelnguyen8


3

Kullanım DateTime:

Yarını bugünden almak için:

$d = new DateTime('+1day');
$tomorrow = $d->format('d/m/Y h.i.s');
echo $tomorrow;

Sonuçlar: 28/06/2017 08.13.20

Bir tarihten yarını almak için:

$d = new DateTime('2017/06/10 08.16.35 +1day')
$tomorrow = $d->format('d/m/Y h.i.s');
echo $tomorrow;

Sonuçlar: 11/06/2017 08.16.35

Umarım yardımcı olur!


1
/**
 * get tomorrow's date in the format requested, default to Y-m-d for MySQL (e.g. 2013-01-04)
 *
 * @param string
 *
 * @return string
 */
public static function getTomorrowsDate($format = 'Y-m-d')
{
    $date = new DateTime();
    $date->add(DateInterval::createFromDateString('tomorrow'));

    return $date->format($format);
}

1

Garip derken mükemmel çalışıyor gibi görünebilir: date_create( '2016-02-01 + 1 day' );

echo date_create( $your_date . ' + 1 day' )->format( 'Y-m-d' );

Yapmalı


0

Birincisi, doğru soyutlamalar bulmak her zaman bir anahtardır. okunabilirlik, sürdürülebilirlik ve genişletilebilirliğin anahtarı.

Burada oldukça açık bir aday bir ISO8601DateTime. En az iki uygulama vardır: ilki bir dizeden ayrıştırılmış bir tarih saattir ve ikincisi yarın. Dolayısıyla, kullanılabilecek iki sınıf vardır ve bunların kombinasyonları (neredeyse) istenen sonucu verir:

new Tomorrow(new FromISO8601('2013-01-22'));

Her iki nesne de bir ISO8601 tarih saatidir, bu nedenle metinsel gösterimleri tam olarak ihtiyacınız olan şey değildir. Yani son vuruş, onları bir tarih formu almalarını sağlamaktır:

new Date(
    new Tomorrow(
        new FromISO8601('2013-01-22')
    )
);

Yalnızca bir nesneye değil, metinsel bir temsile ihtiyacınız olduğundan, bir value()yöntemi çağırırsınız .

Bu yaklaşım hakkında daha fazla bilgi için bir göz atın bu yazı .


-1

işte çalışma fonksiyonu

function plus_one_day($date){
 $date2 = formatDate4db($date);
 $date1 = str_replace('-', '/', $date2);
 $tomorrow = date('Y-m-d',strtotime($date1 . "+1 days"));
 return $tomorrow; }

formatDate4db işlevi ne yapar? Çizgileri neden dizedeki eğik çizgilerle değiştirmelisiniz?
braindigitalis

formatDate4db işlevi tarihi geçirir ve veritabanı mysql formatı ve str_replace işlevi gibi bir format oluşturur, 2019/12/10 tarih formatına sahibim ve -
Muhammad Awais Zulifqar

-4
$date = '2013-01-22';
$time = strtotime($date) + 86400;
echo date('Y-m-d', $time);

86400, bir günde saniye sayısıdır.


11
Hayır, bir günde her zaman 86400 saniye olmaz.
nickb

Problemi anlamıyorum. Lütfen açıklayın @nickb
Aiyion. Başbakan

@ Aiyion. Gün ışığından yararlanma saatine geçiş yapan ilk günlerde 86400 saniye yoktur
dumazy

Bunu düşündüm, DST saat ikide başlatılıyor ve bu nedenle asla farklı bir tarihle sonuçlanmamalı mı?
Aiyion.Prime

Sorun gün ışığından tasarruf etmek değil. Veritabanındaki saatler gerçekten de gün ışığından yararlanma saati olmayan UTC olarak saklanmalıdır. Tarihlerinizi UTC'de saklıyorsanız, bu iyi çalışacaktır ancak biraz karmaşıktır.
braindigitalis
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.