web-dev-qa-db-fra.com

PHP: moyen le plus simple d'obtenir la date du mois 6 mois avant le premier?

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?

34
stormist

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")));
70
Adnan

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

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

?>
9
Eric G

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