Date moins 1 an?

91

J'ai une date dans ce format:

2009-01-01

Comment retourner la même date mais 1 an plus tôt?

Ajsie
la source
3
N'oubliez pas de vous pencher sur la question sémantique de ce que vous entendez par «un an» par rapport aux années bissextiles. Soustraire 365 jours du 2008-02-28 vous donnera 2007-02-28, tandis que soustraire 365 jours du 2008-02-29 vous donnera 2007-03-31.
HostileFork dit de ne pas faire confiance à SE le
Je suppose que cela dépend beaucoup de ce que signifie «soustraire un an». Vous pourriez vouloir dire le même mois et le même jour mais un an plus tôt ou le mois et le jour après avoir soustrait 365 jours comme le souligne Hostile.
D.Shawley

Réponses:

130

Vous pouvez utiliser strtotime:

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

La strtotimefonction renvoie un horodatage unix, pour obtenir une chaîne formatée, vous pouvez utiliser date:

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

Utilisez la fonction strtotime ():

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

Utilisation de l'objet DateTime ...

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

Ou utiliser maintenant pour aujourd'hui

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

un moyen le plus simple que j'ai utilisé et bien travaillé

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

cela a fonctionné parfaitement .. j'espère que cela aidera quelqu'un d'autre aussi .. :)

Saadk
la source
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
la source
6

Sur mon site Web, pour vérifier si les personnes inscrites ont 18 ans , j'ai simplement utilisé ce qui suit:

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

Après, comparez uniquement les deux dates.

J'espère que cela pourrait aider quelqu'un.

Meloman
la source
2

Bien qu'il existe de nombreuses réponses acceptables en réponse à cette question, je ne vois aucun exemple de subméthode utilisant l' \Datetimeobjet: https://www.php.net/manual/en/datetime.sub.php

Donc, pour référence, vous pouvez également utiliser a \DateIntervalpour modifier un \Datetimeobjet:

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

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

Qui retourne:

2008-01-01

Pour plus d'informations sur \DateInterval, reportez-vous à la documentation: https://www.php.net/manual/en/class.dateinterval.php

Oliver Tappin
la source
-3

Vous pouvez utiliser la fonction suivante pour soustraire 1 ou n'importe quelle année d'une date.

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

Et en regardant les exemples ci-dessus, vous pouvez également utiliser ce qui suit

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

la source