Datum minus 1 Jahr?

91

Ich habe ein Datum in diesem Format:

2009-01-01

Wie kann ich das gleiche Datum aber 1 Jahr früher zurückgeben?

Ajsie
quelle
3
Vergessen Sie nicht, sich um die semantische Frage zu kümmern, was Sie unter "ein Jahr" für Schaltjahre verstehen. Wenn Sie 365 Tage vom 28.02.2008 subtrahieren, erhalten Sie den 28.02.2007, und wenn Sie 365 Tage vom 29.02.2008 subtrahieren, erhalten Sie den 31.03.2007.
HostileFork sagt, vertraue SE
Ich denke, dass es sehr davon abhängt, was "ein Jahr subtrahieren" bedeutet. Sie könnten den gleichen Monat und Tag bedeuten, aber ein Jahr früher oder den Monat und den Tag nach dem Subtrahieren von 365 Tagen, wie Hostile betont.
D. Shawley

Antworten:

130

Sie können verwenden strtotime:

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

Die strtotimeFunktion gibt einen Unix-Zeitstempel zurück, um eine formatierte Zeichenfolge zu erhalten, die Sie verwenden können date:

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

Verwenden Sie die Funktion strtotime ():

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

Verwenden des DateTime-Objekts ...

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

Oder jetzt für heute verwenden

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

Ein einfachster Weg, den ich benutzt habe und der gut funktioniert hat

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

das hat perfekt funktioniert .. hoffe das hilft auch jemand anderem .. :)

saadk
quelle
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
quelle
6

Um zu überprüfen, ob die Registrierung von Personen 18 Jahre alt ist , habe ich auf meiner Website einfach Folgendes verwendet:

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

Vergleichen Sie danach nur die beiden Daten.

Hoffe es könnte jemandem helfen.

Meloman
quelle
1

Obwohl es viele akzeptable Antworten auf diese Frage gibt, sehe ich keine Beispiele für die subMethode, die das \DatetimeObjekt verwendet: https://www.php.net/manual/en/datetime.sub.php

Als Referenz können Sie also auch a verwenden \DateInterval, um ein \DatetimeObjekt zu ändern :

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

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

Welches kehrt zurück:

2008-01-01

Weitere Informationen dazu \DateIntervalfinden Sie in der Dokumentation: https://www.php.net/manual/en/class.dateinterval.php

Oliver Tappin
quelle
-3

Mit der folgenden Funktion können Sie 1 oder ein beliebiges Jahr von einem Datum abziehen.

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

Wenn Sie sich die obigen Beispiele ansehen, können Sie auch Folgendes verwenden

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

quelle