Tarih eksi 1 yıl?


91

Bu formatta bir randevum var:

2009-01-01

Aynı tarihi 1 yıl önce nasıl iade ederim?


3
Artık yıllarda "bir yıl" derken neyi kastettiğinize dair anlamsal sorunla ilgilenmeyi unutmayın. 2008-02-28'den 365 gün çıkarmak size 2007-02-28'i verirken, 2008-02-29'dan 365 gün çıkarmak size 2007-03-31 kazandırır.
HostileFork,

Sanırım bu büyük ölçüde "bir yılı çıkarmanın" ne anlama geldiğine bağlı. Düşman'ın işaret ettiği gibi, aynı ay ve günü, ancak bir yıl önce veya 365 günü çıkardıktan sonraki ay ve günü kastedebilirsiniz.
D.Shawley

Yanıtlar:


132

Şunları kullanabilirsiniz strtotime:

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

strtotimeFonksiyonu kullanabilirsiniz biçimlendirilmiş bir dize almak için, bir unix zaman damgası döndürür date:

echo date('Y-m-d', $date); // echoes '2009-01-01'

101

Strtotime () işlevini kullanın:

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

52

DateTime nesnesini kullanma ...

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

Veya bugün için şimdi kullanarak

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

32

iyi kullandığım ve çalıştığım en kolay yol

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

bu mükemmel çalıştı .. umarım bu başka birine de yardımcı olur .. :)


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

6

Web sitemde, kayıt yaptıran kişilerin 18 yaşında olup olmadığını kontrol etmek için aşağıdakileri kullandım:

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

Ardından, yalnızca iki tarihi karşılaştırın.

Umarım birine yardımcı olabilir.


3

Bu soruya yanıt olarak birçok kabul edilebilir cevap olmasına rağmen sub, \Datetimenesneyi kullanan yöntemin herhangi bir örneğini görmüyorum : https://www.php.net/manual/en/datetime.sub.php

Dolayısıyla, referans olarak, \DateIntervalbir \Datetimenesneyi değiştirmek için a da kullanabilirsiniz :

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

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

Hangi döndürür:

2008-01-01

Daha fazla bilgi \DateIntervaliçin belgelere bakın: https://www.php.net/manual/en/class.dateinterval.php


-3

Bir tarihten 1 veya herhangi bir yılı çıkarmak için aşağıdaki işlevi kullanabilirsiniz.

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

Yukarıdaki örneklere bakarak aşağıdakileri de kullanabilirsiniz.

$user_age_min = "-"."1";
echo date('Y-m-d', strtotime($user_age_min.'year'));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.