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?

Istari
sumber

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
shamittomar
sumber
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"
Daniel Vandersluis
sumber
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)

Omn
sumber
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";
Madhu V Rao
sumber
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.

SztupY
sumber
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 
Carlos Martins
sumber
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
Engr Atiq
sumber
2

Di sini ada cara mudah untuk menyelesaikan ini.

<?php
   $date = "2015-11-17";
   echo date('Y-m-d', strtotime($date. ' + 5 days'));
?>

Output akan menjadi:

2015-11-22

Solusi telah ditemukan dari sini - Cara Menambahkan Hari ke Tanggal di PHP

JoyGuru
sumber
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";
vikasgore
sumber
1
Anda seharusnya tidak melakukannya dengan cara ini, pada akhirnya Anda akan memiliki masalah dengan detik kabisat
Nathan