$ 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?


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"));

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!


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));


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;

6

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

<?php (date('Y')+1).date('-m-d'); ?>

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 :)


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');

3

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

date_default_timezone_set()

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.


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));

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."";

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);

-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 :)

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.