Menambahkan tiga bulan ke tanggal di PHP


90

Saya memiliki variabel bernama $effectiveDateberisi tanggal 2012-03-26 .

Saya mencoba menambahkan tiga bulan ke tanggal ini dan tidak berhasil melakukannya.

Inilah yang saya coba:

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate));

dan

$effectiveDate = strtotime(date("Y-m-d", strtotime($effectiveDate)) . "+3 months");

Apa yang saya lakukan salah? Tidak ada satupun kode yang berfungsi.


6
Apa artinya "tidak berhasil"?
Jon

2
Saya mendapatkan 1340649000sebagai jawaban, yang sepertinya benar.
Dogbert

Apakah Anda yakin $effectiveDatemenyimpan apa yang menurut Anda disimpan? Ini bekerja untuk saya .
Josh

Saya mengharapkan tanggal itu ke 2012-06-26 menambahkan 3 bulan ke 2012-03-26
user979331

Dan date('Y-m-d', 1340661600)memberikan 2012-06-26mana yang benar.
Tchoupi

Jawaban:


193

Ubah menjadi ini akan memberi Anda format yang diharapkan:

$effectiveDate = date('Y-m-d', strtotime("+3 months", strtotime($effectiveDate)));

Bagaimana menangani variabel bulan? seperti $ bulan berisi jumlah bulan? "+ '$months' months"tidak bekerja
HKK

4
$offset = 5; echo date('Y-m-d', strtotime("+$offset months", strtotime('2000-01-01'))); Demo
Cees Timmerman

date () jangan gunakan pelokalan. Lebih baik strftime ().
pengguna706420

2
Itu tidak akan berfungsi untuk tanggal seperti ini: tanggal ('2018-01-31', strtotime ('+ 3 bulan')). Jika tanggal berakhir pada 31 dan 3 bulan berikutnya tidak, tanggal tersebut tidak akan mengembalikan tanggal yang benar.
Dan H

3
bukan solusi yang baik - tidak mengembalikan nilai yang benar - seperti yang disebutkan Dan H
Josef Vancura

17

Jawaban ini tidak tepat untuk pertanyaan ini. Tetapi saya akan menambahkan ini karena pertanyaan ini masih dapat dicari bagaimana cara menambah / mengurangi periode dari tanggal.

$date = new DateTime('now');
$date->modify('+3 month'); // or you can use '-90 day' for deduct
$date = $date->format('Y-m-d h:i:s');
echo $date;

5

Saya berasumsi dengan "tidak berfungsi" yang Anda maksud adalah bahwa ini memberi Anda stempel waktu, bukan tanggal yang diformat, karena Anda melakukannya dengan benar:

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate)); // returns timestamp
echo date('Y-m-d',$effectiveDate); // formatted version

3

Anda perlu mengubah tanggal menjadi nilai yang dapat dibaca. Anda dapat menggunakan strftime () atau date ().

Coba ini:

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate));
$effectiveDate = strftime ( '%Y-%m-%d' , $effectiveDate );
echo $effectiveDate;

Ini seharusnya berhasil. Saya suka menggunakan strftime lebih baik karena dapat digunakan untuk pelokalan, Anda mungkin ingin mencobanya.


3

Jawaban Tchoupi dapat dibuat sedikit lebih pendek dengan menggabungkan argumen untuk strtotime () sebagai berikut:

$effectiveDate = date('Y-m-d', strtotime($effectiveDate . "+3 months") );

(Ini bergantung pada detail implementasi sihir, tetapi Anda selalu dapat melihatnya jika Anda benar tidak percaya.)


2

Berikut ini harus bekerja, Silakan Coba ini:

$effectiveDate = strtotime("+1 months", strtotime(date("y-m-d")));
echo $time = date("y/m/d", $effectiveDate);

1

Mengikuti harus bekerja

$d = strtotime("+1 months",strtotime("2015-05-25"));
echo   date("Y-m-d",$d); // This will print **2015-06-25** 

1

Tambahkan hari ke n, bulan dan tahun

$n = 2;
for ($i = 0; $i <= $n; $i++){
    $d = strtotime("$i days");
    $x = strtotime("$i month");
    $y = strtotime("$i year");
    echo "Dates : ".$dates = date('d M Y', "+$d days");
    echo "<br>";
    echo "Months : ".$months = date('M Y', "+$x months");
    echo '<br>';
    echo "Years : ".$years = date('Y', "+$y years");
    echo '<br>';
}

0

Berikut ini seharusnya berfungsi, tetapi Anda mungkin perlu mengubah format:

echo date('l F jS, Y (m-d-Y)', strtotime('+3 months', strtotime($DateToAdjust)));
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.