Tanggal minus 1 tahun?

91

Saya punya tanggal dalam format ini:

2009-01-01

Bagaimana cara mengembalikan tanggal yang sama tetapi 1 tahun sebelumnya?

ajsie
sumber
3
Jangan lupa untuk membahas masalah semantik tentang apa yang Anda maksud dengan tahun kabisat "satu tahun". Pengurangan 365 hari dari 2008-02-28 akan menghasilkan 2007-02-28, sedangkan mengurangi 365 hari dari 2008-02-29 akan menghasilkan 2007-03-31.
HostileFork mengatakan jangan percaya SE
Saya rasa itu sangat tergantung pada apa artinya "mengurangi satu tahun". Anda bisa berarti bulan dan hari yang sama tetapi satu tahun sebelumnya atau bulan dan hari setelah dikurangi 365 hari seperti yang ditunjukkan oleh Hostile.
D. Shawley

Jawaban:

132

Anda dapat menggunakan strtotime:

$date = strtotime('2010-01-01 -1 year');

The strtotimemengembalikan fungsi timestamp unix, untuk mendapatkan string diformat Anda dapat menggunakan date:

echo date('Y-m-d', $date); // echoes '2009-01-01'
Christian C. Salvadó
sumber
101

Gunakan fungsi strtotime ():

  $time = strtotime("-1 year", time());
  $date = date("Y-m-d", $time);
Alex
sumber
52

Menggunakan objek DateTime ...

$time = new DateTime('2099-01-01');
$newtime = $time->modify('-1 year')->format('Y-m-d');

Atau gunakan sekarang untuk hari ini

$time = new DateTime('now');
$newtime = $time->modify('-1 year')->format('Y-m-d');
darrenwh
sumber
32

cara termudah yang saya gunakan dan bekerja dengan baik

date('Y-m-d', strtotime('-1 year'));

ini bekerja dengan sempurna .. semoga ini akan membantu orang lain juga .. :)

saadk
sumber
9
// set your date here
$mydate = "2009-01-01";

/* strtotime accepts two parameters.
The first parameter tells what it should compute.
The second parameter defines what source date it should use. */
$lastyear = strtotime("-1 year", strtotime($mydate));

// format and display the computed date
echo date("Y-m-d", $lastyear);
Nirmal
sumber
6

Di situs web saya, untuk memeriksa apakah orang yang mendaftar berusia 18 tahun , saya cukup menggunakan yang berikut:

$legalAge = date('Y-m-d', strtotime('-18 year'));

Setelah itu, bandingkan saja kedua tanggal tersebut.

Semoga bisa membantu seseorang.

Meloman
sumber
3

Meskipun ada banyak jawaban yang dapat diterima untuk menjawab pertanyaan ini, saya tidak melihat contoh submetode yang menggunakan \Datetimeobjek: https://www.php.net/manual/en/datetime.sub.php

Jadi, sebagai referensi, Anda juga bisa menggunakan a \DateIntervaluntuk memodifikasi \Datetimeobjek:

$date = new \DateTime('2009-01-01');
$date->sub(new \DateInterval('P1Y'));

echo $date->format('Y-m-d');

Yang mengembalikan:

2008-01-01

Untuk informasi lebih lanjut \DateInterval, lihat dokumentasi: https://www.php.net/manual/en/class.dateinterval.php

Oliver Tappin
sumber
-3

Anda dapat menggunakan fungsi berikut untuk mengurangi 1 atau tahun mana pun dari sebuah tanggal.

 function yearstodate($years) {

        $now = date("Y-m-d");
        $now = explode('-', $now);
        $year = $now[0];
        $month   = $now[1];
        $day  = $now[2];
        $converted_year = $year - $years;
        echo $now = $converted_year."-".$month."-".$day;

    }

$number_to_subtract = "1";
echo yearstodate($number_to_subtract);

Dan melihat contoh di atas, Anda juga dapat menggunakan yang berikut ini

$user_age_min = "-"."1";
echo date('Y-m-d', strtotime($user_age_min.'year'));

sumber