$ date + 1 tahun?

91

Saya mencoba mendapatkan tanggal yang satu tahun dari tanggal yang saya tentukan.

Kode saya terlihat seperti ini:

$futureDate=date('Y-m-d', strtotime('+one year', $startDate));

Ini mengembalikan tanggal yang salah. Ada ide mengapa?

Matt
sumber
9
Anda lupa memberi tahu tentang kesalahan tersebut.
BalusC
Frank Farmer: Anda begitu yakin? Saya lebih suka menunggu retifikasi / komentar OP.
BalusC
Karena tergesa-gesa saya memposting ini tadi malam, saya lupa menjelaskan - itu mengembalikan tanggal yang salah. Maaf! Terima kasih atas bantuan Anda.
Matt
1
Gunakan seperti ini sebagai gantinya strtotime ('+ 1 year', $ startDate));
casivaagustin

Jawaban:

98

Untuk menambahkan satu tahun ke tanggal hari ini gunakan yang berikut:

$oneYearOn = date('Y-m-d',strtotime(date("Y-m-d", mktime()) . " + 365 day"));

Untuk contoh lain, Anda harus menginisialisasi $ StartingDate dengan nilai timestamp misalnya:

$StartingDate = mktime();  // todays date as a timestamp

Coba ini

$newEndingDate = date("Y-m-d", strtotime(date("Y-m-d", strtotime($StaringDate)) . " + 365 day"));

atau

$newEndingDate = date("Y-m-d", strtotime(date("Y-m-d", strtotime($StaringDate)) . " + 1 year"));
Nidhin Baby
sumber
Menambahkan "+365" alih-alih "+1 tahun" berhasil. Terima kasih!
Matt
17
Bukankah ini jeda jika terjadi tahun kabisat?
Jeremy1026
1
Pada PHP 5.1, ketika dipanggil tanpa argumen, mktime () melontarkan pemberitahuan E_STRICT: gunakan fungsi time () sebagai gantinya.
svandragt
Juga tidak disukai di sini. Jumlah detik dalam sehari, hari dalam setahun, detik dalam setahun, dll semuanya bervariasi. Jika Anda tertarik dengan 'satu tahun dari sekarang', Anda harus lulus dalam selang waktu 'satu tahun'. Mengelompokkan sendiri inilah yang menyebabkan kesalahan di sekitar hari kabisat dan detik kabisat serta perubahan penghematan siang hari. Lebih buruk lagi, ini menyebabkan tes unit flappy.
drobert
mengapa jawaban saya ditolak ?? $ addedoneyear = tanggal ("y") + 1; // untuk menambah satu tahun ada apa dengan itu?
pathe.kiran
215
$futureDate=date('Y-m-d', strtotime('+1 year'));

$ futureDate adalah satu tahun dari sekarang!

$futureDate=date('Y-m-d', strtotime('+1 year', strtotime($startDate)) );

$ futureDate adalah satu tahun dari $ startDate!

Misho
sumber
Harap dicatat bahwa jika $ startDate sudah menjadi timestamp (seperti yang dibuat sebelumnya dengan fungsi time () atau mktime ()) dan bukan sebuah string, Anda tidak boleh membungkusnya dalam strtotime atau itu tidak akan berfungsi. Sebaliknya, lakukan $futureDate=date('Y-m-d',strtotime('+1 year',$startDate));seperti yang disebutkan K Prime di bawah ini.
dallin
9

Mencoba: $futureDate=date('Y-m-d',strtotime('+1 year',$startDate));

K Prime
sumber
Meskipun itu mengembalikan jawaban yang benar, yang lain tidak benar-benar mengembalikan kesalahan ... hanya tanggal yang salah.
SeanJA
1
strtotime tidak membuang kesalahan. Ini mengembalikan false jika terjadi kesalahan.
Frank Farmer
PHP akan memberikan peringatan jika zona waktu default tidak disetel ... meskipun ternyata bukan itu yang dia maksud
SeanJA
Saya mendapatkan kesalahan pada kode Anda saya berubah ,untuk .dan bekerja date("Y-m-d",strtotime('+1 year '.$startDate));
Muhammad Bilal
7
// Declare a variable for this year 
$this_year = date("Y");
// Add 1 to the variable
$next_year = $this_year + 1;
$year_after = $this_year + 2;

// Check your code
    echo "This year is ";
    echo $this_year;
    echo "<br />";
    echo "Next year is ";
    echo $next_year;
    echo "<br />";
    echo "The year after that is ";
    echo $year_after;
AnarchyOutlaw
sumber
6

hanya memiliki masalah yang sama, namun ini adalah solusi paling sederhana:

<?php (date('Y')+1).date('-m-d'); ?>
Gardenee
sumber
Besar, saya menggunakannya untuk mendapatkan tahun depan: $next_year = (date('Y')+1).
Martin
5
//1 year from today's date
echo date('d-m-Y', strtotime('+1 year'));

//1 year from from specific date
echo date('22-09-Y', strtotime('+1 year'));

semoga sedikit kode yang lebih sederhana ini membantu seseorang di masa depan :)

Pengembang
sumber
4

Saya lebih suka pendekatan OO:

$date = new \DateTimeImmutable('today'); //'today' gives midnight, leave blank for current time.
$futureDate = $date->add(\DateInterval::createFromDateString('+1 Year'))

Gunakan DateTimeImmutablejika tidak, Anda juga akan mengubah tanggal aslinya! lebih lanjut tentang DateTimeImmutable: http://php.net/manual/en/class.datetimeimmutable.php


Jika Anda hanya ingin dari tanggal hari ini maka Anda selalu dapat melakukan:

new \DateTimeImmutable('-1 Month');
Andrew Atkinson
sumber
3

Jika Anda menggunakan PHP 5.3, itu karena Anda perlu menyetel zona waktu default:

date_default_timezone_set()
SeanJA
sumber
3

strtotime()kembali bool(false), karena tidak dapat mengurai string '+one year'(tidak memahami "satu"). falsekemudian secara implisit dilemparkan ke integerstempel waktu 0. Merupakan ide yang baik untuk memverifikasi strtotime()bahwa keluaran tidak bool(false)sebelum Anda mendorongnya ke fungsi lain.

Dari dokumen:

Kembalikan Nilai

Mengembalikan stempel waktu kesuksesan, FALSE sebaliknya. Sebelum PHP 5.1.0, fungsi ini akan mengembalikan -1 jika gagal.

Frank Farmer
sumber
Ya, poin yang bagus. Kode produksi saya akan memilikinya, tetapi saya merobek rambut saya mencoba untuk membuatnya bekerja, jadi hilangkan kode sesedikit mungkin. Terima kasih!
Matt
2

Coba ini

$nextyear  = date("M d,Y",mktime(0, 0, 0, date("m",strtotime($startDate)),   date("d",strtotime($startDate)),   date("Y",strtotime($startDate))+1));
Treby
sumber
1

Ada juga solusi yang lebih sederhana dan kurang canggih:

$monthDay = date('m/d');
$year = date('Y')+1;
$oneYearFuture = "".$monthDay."/".$year."";
echo"The date one year in the future is: ".$oneYearFuture."";
Daniel Lima
sumber
1

Solusi saya adalah: date('Y-m-d', time()-60*60*24*365);

Anda bisa membuatnya lebih "mudah dibaca" dengan definisi:

define('ONE_SECOND', 1);
define('ONE_MINUTE', 60 * ONE_SECOND);
define('ONE_HOUR',   60 * ONE_MINUTE);
define('ONE_DAY',    24 * ONE_HOUR);
define('ONE_YEAR',  365 * ONE_DAY);

date('Y-m-d', time()-ONE_YEAR);
Adam Mester
sumber
-1

Dalam kasus saya (saya ingin menambahkan 3 tahun ke tanggal sekarang) solusinya adalah:

$future_date = date('Y-m-d', strtotime("now + 3 years"));

Kepada Gardenee, Treby dan Daniel Lima: apa yang akan terjadi dengan 29 Februari? Terkadang Februari hanya memiliki 28 hari :)

aiuen
sumber