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?


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'

99

Utilisez la fonction strtotime ():

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

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

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


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

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.


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


-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'));
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.