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.