Data meno 1 anno?


91

Ho una data in questo formato:

2009-01-01

Come faccio a restituire la stessa data ma 1 anno prima?


3
Non dimenticare di occuparti della questione semantica di cosa intendi per "un anno" rispetto agli anni bisestili. Sottraendo 365 giorni dal 2008-02-28 otterrai 2007-02-28, mentre sottraendo 365 giorni dal 2008-02-29 otterrai 2007-03-31.
HostileFork dice di non fidarsi di SE il

Immagino che dipenda molto da cosa significa "sottrarre un anno". Potresti intendere lo stesso mese e giorno ma un anno prima o il mese e il giorno dopo aver sottratto 365 giorni come sottolinea Hostile.
D.Shawley

Risposte:


130

Puoi usare strtotime:

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

La strtotimefunzione restituisce un timestamp unix, per ottenere una stringa formattata che puoi utilizzare date:

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

99

Usa la funzione strtotime ():

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

51

Utilizzo dell'oggetto DateTime ...

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

O usando adesso per oggi

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

31

un modo più semplice che ho usato e funzionato bene

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

ha funzionato perfettamente .. spero che questo possa aiutare anche qualcun altro .. :)


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

Sul mio sito web, per verificare se la registrazione delle persone ha 18 anni , ho semplicemente usato quanto segue:

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

Dopo, confronta solo le due date.

Spero possa aiutare qualcuno.


2

Sebbene ci siano molte risposte accettabili in risposta a questa domanda, non vedo alcun esempio del submetodo che utilizza l' \Datetimeoggetto: https://www.php.net/manual/en/datetime.sub.php

Quindi, come riferimento, puoi anche usare a \DateIntervalper modificare un \Datetimeoggetto:

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

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

Che ritorna:

2008-01-01

Per ulteriori informazioni su \DateInterval, fare riferimento alla documentazione: https://www.php.net/manual/en/class.dateinterval.php


-3

È possibile utilizzare la seguente funzione per sottrarre 1 o qualsiasi anno da una data.

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

E guardando gli esempi sopra puoi anche usare quanto segue

$user_age_min = "-"."1";
echo date('Y-m-d', strtotime($user_age_min.'year'));
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.