web-dev-qa-db-fra.com

Essayer d'obtenir le numéro du mois précédent du mois en cours

J'essaie d'obtenir le nombre de mois avant le mois en cours (maintenant 04 (avril), j'essaie donc d'obtenir 03) J'essaye ceci:

date('m')-1;

mais je reçois 3. Mais ce que je veux, c'est obtenir 03.

19
ziiweb

La bonne façon de faire est vraiment:

date('m', strtotime('-1 month'));

Comme vous verrez d'étranges choses se passent en janvier avec d'autres réponses.

39
glebtv

La réponse actuellement acceptée entraînera une réponse incorrecte chaque fois que le jour du mois (pour le jour en cours) est un nombre supérieur au dernier jour du mois du mois précédent. 

par exemple. Le résultat de l'exécution de date('m', strtotime('-1 month')); le 29 mars (dans une année non bissextile) sera 03, car 29 est plus grand que n'importe quel jour du mois en février et strtotime('-1 month') retournera donc le 1er mars. 

À la place, utilisez ce qui suit:

date('n') - 1;
3
GordyB

Vous serez peut-être surpris, mais la page de manuel de la fonction date () contient un exemple exact de ce dont vous avez besoin:

$lastmonth = mktime(0, 0, 0, date("m")-1, date("d"), date("Y"));
1
Your Common Sense

Le résultat de votre calcul est un nombre. Si vous voulez le formater comme une chaîne, vous pouvez utiliser:

$result = date('m')-1;
$string_result = sprintf("%02s", $result);

Edit: Notez que ce n'est qu'une solution partielle pour formater un nombre comme une chaîne.

0
jeroen
intval(date('m'))

pour le mois en cours

(intval(date('m'))-1)%12

pour le mois précédent, également pour décembre/janvier

0
Luca C.