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.