Menambahkan hari ke $ Tanggal dalam PHP


215

Saya memiliki tanggal yang dikembalikan sebagai bagian dari kueri mySQL dalam formulir 2010-09-17

Saya ingin mengatur variabel $ Date2 ke $ Date5 sebagai berikut:

$Date2 = $Date + 1

$Date3 = $Date + 2

dll ..

sehingga ia kembali 2010-09-18, 2010-09-19dll ...

saya telah mencoba

date('Y-m-d', strtotime($Date. ' + 1 day'))

tapi ini memberi saya tanggal SEBELUM $Date.

Apa cara yang benar untuk mendapatkan Tanggal dalam format format 'Ymd' sehingga dapat digunakan dalam kueri lain?


Jawaban:


446

Yang harus Anda lakukan adalah menggunakan daysalih-alih dayseperti ini:

<?php
$Date = "2010-09-17";
echo date('Y-m-d', strtotime($Date. ' + 1 days'));
echo date('Y-m-d', strtotime($Date. ' + 2 days'));
?>

Dan hasilnya benar:

2010-09-18
2010-09-19

7
Ini menghasilkan dengan benar menggunakan dayjuga ... date("Y-m-d", strtotime('2010-09-17 + 1 day'))-> 2010-09-18, date("Y-m-d", strtotime('2010-09-17 + 2 day'))->2010-09-19
— Daniel Vandersluis

Coba saja dengan cara ini dan berhasil. Saya masih tidak tahu mengapa saya mendapat nilai satu hari sebelum tanggal mulai ketika saya awalnya mencobanya.
— Istari

Bagaimana jika saya memiliki variabel untuk ditambahkan beberapa hari?
— Carlos Martins

3
@Carlos date echo ("Ymd", strtotime ($ Date. '+'. $ Variable. 'Days'));
— Pradeep Kumar Prabaharan

Tidak, metode ini tidak berfungsi sama sekali. Ini akan kembali pada tanggal 2004.
— gegobyte

81

Jika Anda menggunakan PHP 5.3, Anda dapat menggunakan DateTimeobjek dan addmetodenya:

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->add(new DateInterval('P1D')); // P1D means a period of 1 day
$Date2 = $date->format('Y-m-d');

Lihatlah halaman manual DateIntervalkonstruktor untuk melihat bagaimana membangun periode lain untuk ditambahkan ke tanggal Anda (2 hari 'P2D', 3 akan 'P3D', dan seterusnya).

Tanpa PHP 5.3, Anda harus dapat menggunakan strtotimecara Anda melakukannya (saya sudah mengujinya dan bekerja di 5.1.6 dan 5.2.10):

$Date1 = '2010-09-17';
$Date2 = date('Y-m-d', strtotime($Date1 . " + 1 day"));
// var_dump($Date2) returns "2010-09-18"

Maaf Daniel, tetapi server web menjalankan php 5.2.6, jadi ini tidak akan berhasil
— Istari

2
DateTime::constructmenggunakan mekanisme yang sama strtotimedengan mengurai tanggal, sehingga Anda juga dapat melakukan new DateTime("+1 day $date")yang tidak memerlukan 5.3
— Gordon

Saya tidak bermaksud untuk mengundurkan diri ini, tapi entah bagaimana saya = /
— Steven

Ini adalah jawaban aktual untuk php
— 5.5+

29

Dari PHP 5.2 Anda dapat menggunakan modifikasi dengan objek DateTime:

http://php.net/manual/en/datetime.modify.php

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->modify('+1 day');
$Date2 = $date->format('Y-m-d');

Hati-hati saat menambahkan bulan ... (dan sedikit banyak, bertahun-tahun)


jawaban yang diterima hanya memberikan jawaban untuk 15000+ hari di mana jawaban ini memberikan jawaban ketika Anda menambahkan 25000+ hari juga ..
— Pradeep Kumar Prabaharan

Anda juga dapat menanyakan ini pada DateTimeImmutable () dan Anda mendapatkan salinan yang dimodifikasi tanpa risiko mengubah yang asli.
— Xavi Montero

17

Berikut ini cuplikan kecil untuk menunjukkan modifikasi tanggal:

$date = date("Y-m-d");
//increment 2 days
$mod_date = strtotime($date."+ 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//decrement 2 days
$mod_date = strtotime($date."- 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 month
$mod_date = strtotime($date."+ 1 months");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 year
$mod_date = strtotime($date."+ 1 years");
echo date("Y-m-d",$mod_date) . "\n";

dapatkah Anda melihat terkait saya (quesiton) [ stackoverflow.com/q/61421783/8919244] ?
— Faisal

8

Anda juga dapat menggunakan format berikut

strtotime("-3 days", time());
strtotime("+1 day", strtotime($date));

Anda dapat menumpuk perubahan dengan cara ini:

strtotime("+1 day", strtotime("+1 year", strtotime($date)));

Perhatikan perbedaan antara pendekatan ini dan yang ada di jawaban lain: alih-alih menyatukan nilai +1 daydan <timestamp>, Anda bisa meneruskan di timestamp sebagai parameter kedua strtotime.


5

Menggunakan variabel untuk Jumlah hari

$myDate = "2014-01-16";
$nDays = 16;
$newDate = strtotime($myDate . '+ '.$nDays.'days');
echo newDate('d/m/Y', $soma); //format new date 

5

Berikut adalah solusi paling sederhana untuk kueri Anda

$date=date_create("2013-03-15"); // or your date string
date_add($date,date_interval_create_from_date_string("40 days"));// add number of days 
echo date_format($date,"Y-m-d"); //set date format of the result


0

Semua harus menggunakan kode di bawah ini:

$nday = time() + ( 24 * 60 * 60);    
echo 'Now:       '. date('Y-m-d') ."\n";    
echo 'Next Day: '. date('Y-m-d', $nday) ."\n";

1
Anda seharusnya tidak melakukannya dengan cara ini, pada akhirnya Anda akan memiliki masalah dengan detik kabisat
— Nathan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.