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?


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'

99

Verwenden Sie die Funktion strtotime ():

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

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

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


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

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.


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


-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'));
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.