PHP, Dapatkan tanggal besok dari tanggal

89

Saya memiliki tanggal PHP dalam bentuk 2013-01-22dan saya ingin mendapatkan tanggal besok dalam format yang sama, jadi misalnya 2013-01-23.

Bagaimana ini mungkin dengan PHP?

Justin
sumber

Jawaban:

206

Gunakan DateTime

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

Atau:

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

Atau:

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

Atau dalam PHP 5.4+:

echo (new DateTime('2013-01-22'))->add(new DateInterval("P1D"))
                                 ->format('Y-m-d H:i:s');
John Conde
sumber
1
Ini menggunakan arus, saya harus lewat pada tanggal tertentu.
Justin
Cara ke-2 mungkin yang terbaik.
nickb
73
 $tomorrow = date("Y-m-d", strtotime('tomorrow'));

atau

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

Tautan Bantuan: STRTOTIME ()

Laura Chesches
sumber
1
Saya menggunakan yang ini dan dari semua jawaban adalah versi terpendek dan paling sederhana, terima kasih!
Bombelman
17

Karena Anda menandai ini dengan , Anda dapat menggunakannya dengan +1 daypengubah seperti ini:

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

Karena itu, ini adalah solusi yang jauh lebih baik untuk menggunakan DateTime .

Rudi Visser
sumber
14
<? php 

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

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

?>
andy
sumber
17
Perhatikan bahwa ini akan gagal dalam kasus edge (waktu musim panas).
JJJ
Jawaban ini salah. Saya memiliki cronjob yang menggunakan ini dalam satu lingkaran, dan sistem mati.
Jewelnguyen8
5

echo date ('Y-m-d',strtotime('+1 day', strtotime($your_date)));

ABDUL JAMAL
sumber
3

Penggunaan DateTime:

Untuk mendapatkan hari esok dari sekarang:

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

Hasil: 28/06/2017 08.13.20

Untuk mendapatkan besok dari kencan:

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

Hasil: 11/06/2017 08.16.35

Semoga membantu!

Gregorio
sumber
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);
}
crmpicco.dll
sumber
1

Anehnya, sepertinya itu berfungsi dengan baik: date_create( '2016-02-01 + 1 day' );

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

Harus melakukannya

Diogo Neves - Mangaru
sumber
0

Pertama, menghasilkan abstraksi yang benar selalu menjadi kunci. kunci untuk keterbacaan, pemeliharaan, dan kemampuan diperpanjang.

Di sini, kandidat yang cukup jelas adalah seorang ISO8601DateTime. Setidaknya ada dua implementasi: yang pertama adalah waktu parsing dari string, dan yang kedua adalah besok. Oleh karena itu, ada dua kelas yang dapat digunakan, dan kombinasi keduanya menghasilkan (hampir) hasil yang diinginkan:

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

Kedua objek tersebut adalah waktu tanggal ISO8601, jadi representasi tekstualnya tidak persis seperti yang Anda butuhkan. Jadi goresan terakhir adalah membuat mereka mengambil bentuk tanggal:

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

Karena Anda membutuhkan representasi tekstual, bukan hanya sebuah objek, Anda memanggil sebuah value()metode.

Untuk lebih lanjut tentang pendekatan ini, lihat posting ini .

Vadim Samokhin
sumber
-1

inilah fungsi kerjanya

function plus_one_day($date){
 $date2 = formatDate4db($date);
 $date1 = str_replace('-', '/', $date2);
 $tomorrow = date('Y-m-d',strtotime($date1 . "+1 days"));
 return $tomorrow; }
Muhammad Awais Zulifqar
sumber
apa yang dilakukan fungsi formatDate4db? Mengapa mengganti tanda hubung dengan garis miring pada string?
braindigitalis
fungsi formatDate4db melewatkan tanggal dan itu membuat format seperti format database mysql, dan fungsi str_replace, saya memiliki format tanggal 2019/12/10 dan mengganti dengan -
Muhammad Awais Zulifqar
-4
$date = '2013-01-22';
$time = strtotime($date) + 86400;
echo date('Y-m-d', $time);

Di mana 86400 adalah # detik dalam sehari.

Jason
sumber
11
Tidak, satu hari tidak selalu memiliki 86400 detik.
nickb
Saya tidak mengerti masalahnya. Tolong jelaskan @nickb
Aiyion.Prime
@ Aiyion. Hari-hari utama yang membuat peralihan ke atau dari waktu musim panas tidak memiliki waktu 86400 detik
dumazy
Saya memikirkan itu, DST dimulai pada jam dua dan oleh karena itu tidak boleh menghasilkan tanggal yang berbeda?
Aiyion.Prime
Masalahnya bukanlah penghematan siang hari. Waktu dalam database harus disimpan sebagai UTC yang tidak memiliki waktu musim panas. Jika Anda menyimpan tanggal Anda dalam UTC ini akan berfungsi dengan baik tetapi agak tumpul.
braindigitalis