Tambahkan jumlah hari ke tanggal

124

Saya ingin menambahkan jumlah hari ke tanggal saat ini: Saya menggunakan kode berikut:

$i=30;
echo $date = strtotime(date("Y-m-d", strtotime($date)) . " +".$i."days");

Tapi bukannya mendapatkan tanggal yang tepat saya mendapatkan ini: 2592000

Tolong sarankan.

Pankaj Khurana
sumber
4
cari menggunakan nama tag dengan tanda kurung di sekitar mereka, misalnya [php] [date] adddi kotak pencarian. Anda akan menemukan banyak jawaban untuk pertanyaan seperti ini.
Mikel

Jawaban:

247

Ini seharusnya

echo date('Y-m-d', strtotime("+30 days"));

strtotime

mengharapkan akan diberikan string yang berisi format tanggal Bahasa Inggris AS dan akan mencoba mem-parsing format itu ke cap waktu Unix (jumlah detik sejak 1 Januari 1970 00:00:00 UTC), relatif terhadap stempel waktu yang diberikan sekarang, atau waktu sekarang jika sekarang tidak disediakan.

sementara date

Mengembalikan string yang diformat sesuai dengan string format yang diberikan menggunakan stempel waktu bilangan bulat yang diberikan atau waktu saat ini jika tidak ada stempel waktu yang diberikan.

Lihat halaman manual untuk

dan tanda tangan fungsinya.

Gordon
sumber
Saya pikir ini akan menyebabkan masalah ketika melintasi waktu penghematan siang hari dan item kalender lucu lainnya. Itu semacam tergantung pada konteksnya. Anda perlu memikirkan jika Anda mencari 30 blok 24 jam, yang, ketika melintasi siang hari waktu penghematan, mungkin membuat Anda pukul 11:00 PM.
JJ Rohrer
1
@ JJRohrer tidak, tidak akan. strtotimeakan mengambil DST untuk zona waktu yang dikonfigurasikan ke dalam akun. DST hanya masalah ketika Anda melakukan sesuatu seperti OP ini: stackoverflow.com/questions/4066035
Gordon
Poin yang diambil. Saya tiba di Pertanyaan ini mencoba menyelesaikan sesuatu yang sedikit lebih dekat dengan pertanyaan yang Anda rujuk. Saya harap komentar saya di atas dengan membuat orang lain berpikir tentang mengambil perhitungan tanggal mereka dengan serius - mudah untuk melupakan semua pengecualian.
JJ Rohrer
64

Yang ini mungkin bagus

function addDayswithdate($date,$days){

    $date = strtotime("+".$days." days", strtotime($date));
    return  date("Y-m-d", $date);

}
Gowri
sumber
4
Solusi di atas dapat dipadatkan dalam satu baris juga jika Anda membutuhkan solusi cepat dan tidak ingin membuat suatu fungsi. tanggal gema ("Ymd", strtotime ("+ 12days", strtotime (20130101)))
Mayank Jaiswal
46
$date = new DateTime();
$date->modify('+1 week');
print $date->format('Y-m-d H:i:s');

atau print date('Y-m-d H:i:s', mktime(date("H"), date("i"), date("s"), date("m"), date("d") + 7, date("Y"));

chx
sumber
Metode ini membahas persimpangan waktu siang hari. Saya tidak yakin apakah akun php untuk kebiasaan waktu lain, seperti detik kabisat, tetapi, tergantung pada kebutuhan Anda, Anda mungkin lebih baik menggunakan DateTime vs StrToTime jika Anda berhadapan dengan hari kalender.
JJ Rohrer
@ chx Solusi ini juga lebih hati-hati memungkinkan kencan; misalnya, DateTime baru ('2016-12-09 10:35:58'); yang datang dari timestamp basis data ...
mshaffer
10
$today=date('d-m-Y');
$next_date= date('d-m-Y', strtotime($today. ' + 90 days'));
echo $next_date;
shraddha Dharmamer
sumber
10

Anda dapat menambahkan seperti ini juga, jika Anda menginginkan tanggal 5 hari dari tanggal tertentu:

Anda memiliki variabel dengan tanggal seperti ini (didapat dari input atau DB atau hanya kode keras):

$today = "2015-06-15"; // Or can put $today = date ("Y-m-d");

$fiveDays = date ("Y-m-d", strtotime ($today ."+5 days"));

echo $fiveDays; // Will output 2015-06-20
Andy
sumber
7

Perlu diingat, perubahan jam berubah karena waktu musim panas mungkin memberi Anda beberapa masalah saat hanya menghitung hari.

Inilah sedikit fungsi php yang menangani hal itu:

function add_days($date, $days) {
    $timeStamp = strtotime(date('Y-m-d',$date));
    $timeStamp+= 24 * 60 * 60 * $days;

    // ...clock change....
    if (date("I",$timeStamp) != date("I",$date)) {
        if (date("I",$date)=="1") { 
            // summer to winter, add an hour
            $timeStamp+= 60 * 60; 
        } else {
            // summer to winter, deduct an hour
            $timeStamp-= 60 * 60;           
        } // if
    } // if
    $cur_dat = mktime(0, 0, 0, 
                      date("n", $timeStamp), 
                      date("j", $timeStamp), 
                      date("Y", $timeStamp)
                     ); 
    return $cur_dat;
}
Bjoern
sumber
7

Anda juga dapat mencoba:

$date->modify("+30 days");

Insektator
sumber
6

Anda dapat melakukannya dengan memanipulasi kode waktu atau dengan menggunakan strtotime () . Berikut ini contoh menggunakan strtotime.

$ data ['dibuat'] = tanggal ('Ymd H: i: s', strtotime ("+ 1 minggu"));

Paul Truesdell
sumber
6

Anda dapat menggunakan strtotime ()
$data['created'] = date('Y-m-d H:m:s', strtotime('+1 week'));

Laxman13
sumber
6

Saya tahu ini adalah pertanyaan lama, tetapi untuk PHP <5.3 Anda bisa mencoba ini:

$date = '05/07/2013';
$add_days = 7;
$date = date('Y-m-d',strtotime($date) + (24*3600*$add_days)); //my preferred method
//or
$date = date('Y-m-d',strtotime($date.' +'.$add_days.' days');
Fabrizio
sumber
5

Anda bisa menggunakan kelas DateTime yang dibangun dalam PHP. Ini memiliki metode yang disebut "add", dan bagaimana itu digunakan ditunjukkan secara menyeluruh dalam manual: http://www.php.net/manual/en/datetime.add.php

Namun itu membutuhkan PHP 5.3.0.

mqchen
sumber
5
$date = "04/28/2013 07:30:00";

$dates = explode(" ",$date);

$date = strtotime($dates[0]);

$date = strtotime("+6 days", $date);

echo date('m/d/Y', $date)." ".$dates[1];
Mayank Raipure
sumber
4

Anda dapat mencoba ini.

$i=30;
echo  date("Y-m-d",mktime(0,0,0,date('m'),date('d')+$i,date('Y')));
J.Rob
sumber
3

Sederhana dan Terbaik

echo date('Y-m-d H:i:s')."\n";
echo "<br>";
echo date('Y-m-d H:i:s', mktime(date('H'),date('i'),date('s'), date('m'),date('d')+30,date('Y')))."\n";

Coba ini

pengguna3767878
sumber
3
//add the two day

$date = "**2-4-2016**"; //stored into date to variable

echo date("d-m-Y",strtotime($date.**' +2 days'**));

//print output
**4-4-2016**
Sajan Patel
sumber
2

Gunakan fungsi addDate () ini untuk menambah atau mengurangi hari, bulan, atau tahun (Anda juga memerlukan fungsi tambahan reformatDate () juga)

/**
 * $date self explanatory
 * $diff the difference to add or subtract: e.g. '2 days' or '-1 month'
 * $format the format for $date
 **/
    function addDate($date = '', $diff = '', $format = "d/m/Y") {
        if (empty($date) || empty($diff))
            return false;
        $formatedDate = reformatDate($date, $format, $to_format = 'Y-m-d H:i:s');
        $newdate = strtotime($diff, strtotime($formatedDate));
        return date($format, $newdate);
    }
    //Aux function
    function reformatDate($date, $from_format = 'd/m/Y', $to_format = 'Y-m-d') {
        $date_aux = date_create_from_format($from_format, $date);
        return date_format($date_aux,$to_format);
    }

Catatan: hanya untuk php> = 5.3

Juancho Ramone
sumber
1
//Set time zone
date_default_timezone_set("asia/kolkata");
$pastdate='2016-07-20';
$addYear=1;
$addMonth=3;
$addWeek=2;
$addDays=5;
$newdate=date('Y-m-d', strtotime($pastdate.' +'.$addYear.' years +'.$addMonth. ' months +'.$addWeek.' weeks +'.$addDays.' days'));
echo $newdate;
Pengembang Web Dharmendra Verma
sumber
1

Meskipun ini adalah pertanyaan lama, cara melakukannya akan membutuhkan banyak situasi dan tampaknya kuat. Anda harus memiliki PHP 5.3.0 atau lebih tinggi.

$EndDateTime = DateTime::createFromFormat('d/m/Y', "16/07/2017");
$EndDateTime->modify('+6 days');
echo $EndDateTime->format('d/m/Y');

Anda dapat memiliki jenis format apa pun untuk string tanggal dan ini akan berhasil.

Deepak Daniel
sumber