Donc, si aujourd'hui était le 12 avril 2010, il devrait revenir le 1er octobre 2009
Certaines solutions possibles que j'ai googlé semblent trop complexes, des suggestions?
Hm, peut-être quelque chose comme ça;
echo date("F 1, Y", strtotime("-6 months"));
ÉDITER;
si vous souhaitez spécifier une utilisation de date personnalisée;
echo date("F, 1 Y", strtotime("-6 months", strtotime("Feb 2, 2010")));
utilisez une combinaison de mktime
et date
:
$date_half_a_year_ago = mktime(0, 0, 0, date('n')-6, 1, date('y'))
pour faire la nouvelle date par rapport à une date donnée et non pas aujourd'hui, appelez date
avec un second paramètre
$given_timestamp = getSomeDate();
$date_half_a_year_ago = mktime(0, 0, 0, date('n', $given_timestamp)-6, 1, date('y', $given_timestamp))
pour le sortir formaté, utilisez simplement date
à nouveau:
echo date('F j, Y', $date_half_a_year_ago);
Un peu hackish mais ça marche:
<?php
$date = new DateTime("-6 months");
$date->modify("-" . ($date->format('j')-1) . " days");
echo $date->format('j, F Y');
?>
Il a été discuté dans les commentaires, mais la réponse acceptée contient des appels strtotime()
inutiles. Peut être simplifié pour:
date("F 1, Y", strtotime("Feb 2, 2010 - 6 months"));
En outre, vous pouvez utiliser DateTime()
comme ceci qui, je pense, est tout aussi lisible:
(new DateTime('Feb 2, 2010'))->modify('-6 months')->format('M 1, Y');
Ou en utilisant une méthode statique ....
DateTime::createFromFormat('M j, Y','Feb 2, 2010')
->modify('-6 months')
->format('M 1, Y');