PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 14-01-2010 16:17:11

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Obtention du mois prochain en PHP

Saluton,
Les anglophones pourront directement lire ce post :
http://derickrethans.nl/obtaining-the-n … n-php.html
Pour les autres, j'en ai traduit l'essentiel :

Les utilisateurs de PHP se plaignent de longue date de ce que l'attribut [small]next month[/small] des fonctions de date chaînes ne retournent pas toujours le bon mois, mais saute  au mois  d'après; comme dans l'exemple suivant:

<?php
$d = new DateTime( '2010-01-31' );
$d->modify( 'next month' );
echo $d->format( 'F' ), "\n";
?>

Le résultat de ce petit bout de script sera [small]March[/small]. [small]March[/small] notoirement ne suit pas [small]January[/small] puisque [small]February[/small] se trouve entre eux. Cependant, ce comportement de PHP est correct. Voici ce qui se passe en interne:
   -. [small]next month[/small] incrémente de un le rang du mois (1 à l'origine). ce qui transforme la date en  [small]2010-02-31[/small].
   -. Le deuxième mois ([small]February[/small]) ne comptant que 28 jours en 2010,  PHP opère une auto-correction en continuant à compter des jours ce qui le mène au 3 de [small]March[/small].[/q]
Cela peut se vérifier aisément en demandant l'affichage suivant qui retournera [small]March 3rd, 2010[/small]:

<?php
echo $d->format( 'F jS, Y' ), "\n";
?>

Pour pallier cet inconvénient, on pourra recourir à une nouvelle fonctionnalité de PHP 5.3 qui introduit l'expression de temps relatif [small]first day of[/small]. Que l'on peut combiner avec  [small]next month, fifth month[/small] ou [small]+8 months[/small] pour atteindre le premier jour du mois spécifié. Au lieu du [small]next month[/small] de l'exemple précédent, on utilise [small]first day of next month[/small] comme ci-dessous:

<?php
$d = new DateTime( '2010-01-08' );
$d->modify( 'first day of next month' );
echo $d->format( 'F' ), "\n";
?>

Ce script retournera bien [small]February[/small]. Voici ce qui se passe quand  PHP interprète ces expressions [small]first day of next month[/small] :
   -.[small]next month[/small] incrémente de un le rang du mois (1 à l'origine). ce qui transforme la date en [small]2010-02-31[/small].
   -.[small]first day of[/small] met le rang du jour à 1, il en résulte la date 2010-02-01.
   -.la fonction de formatage de date retourne bien [small]February[/small].


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#2 14-01-2010 20:23:40

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Obtention du mois prochain en PHP

Bien intéressant ! J'avais déjà eu le soucis et avais fait une boucle incrémentant le nombre de jour jusqu'à passer au mois suivant... (oui très barbare...)

Hors ligne

Pied de page des forums