Gotcha ! Tomorrow never dies.
Une fois n'est pas coutume dans le bar, voici le piège à con du mois :-D
Ayant raz la casquette de l'API merdique de PHP concernant le temps, j'ai décidé de me faire des classes propres, avec une interface cohérente et pratique.
Premier jet.
Comme on peut le constater, j'obtenais le lendemain en ajoutant 24 * 60 * 60 secondes.
Mais bizarrement, le 28 octobre 2007 était un jour sans fin...
Celui qui trouvera le pourquoi du comment en moins de deux heures aura mon éternelle admiration
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Le problème est pourtant simple :)
Le postulat qui dit que l'on passe au lendemain en ajoutant 24 * 60 * 60 secondes au timestamp courant est faux.
En effet, si on s'attarde un peu sur ton script, on voit que l'exécution part en vrille au moment ou le timestamp atteint 1193522400 (soit le 28 octobre 2007).
Au tour suivant, on arrive à un timestamp de 1193608800.
Or, ce timestamp correspond toujours au 28 octobre 2007.
En effet, le 28 octobre 2007, nous étions le dernier dimanche d'octobre. Et le dernier dimanche de tous les mois d'octobre, nous passons en heure d'hiver : on retire 60 minutes à l'heure courante.
PS : tu dois ton éternelle admiration à un collègue : wako ;) (on a réfléchi chacun de notre côté sur ton soucis)
Ah ben bravo ;)
Je ne pouvais pas me rendre compte que le timstamp changeait, puisqu'avant de l'afficher je le recalcule (dans mon constructeur), ce qui fait que je ne le voyais plus bouger.
Ce n'est qu'en cherchant le timestamp dans Google que je suis tombé sur un forum dans lequel on parlait du changement d'heure.
Je vomis désormais sur Benjamin Franklin, et je le vomirais tant que je penserais au changement d'heure.
Bref, j'ai remplacé :
<?php $aday = getdate($this->timestamp + 24 * 60 * 60) ;
?>
par
Mais par curiosité, qu'est-ce qui vous a mis sur la piste, toi et ton collègue ?
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Ben moi, dans le for, j'ai var_dumper $day, et j'ai vu que le timestamp de l'objet ne bougeait plus.
Ensuite, j'ai fais un getdate sur le timestamp précédent, et sur celui ou ca merdait.
Dans les deux cas, ca retournait le 28 octobre, le premier à 0h, le deuxième à 23h.
Moi, chuis resté bloqué la dessus. Je pensais en fait à un bug de getdate.
Et c'est mon pote qui m'a dit "passage à l'heure d'hiver".
Ca parait con quand tu as la solution, mais j'avoue être resté perplexe devant ton code pendant 45mn.
Ecrire un message
Votre message vient d'être créé avec succès.
BB-Code
Pour insérer une URL clickable
Pour insérer une adresse E-mail
Pour annoter
Pour écrire du code
Pour faire un lien vers une fonction PHP
Pour écrire du texte préformaté
Pour écrire du texte en gras
Pour écrire du texte en italique
Pour écrire du texte souligné
Pour écrire du texte barré
Pour écrire un titre principal
Pour écrire un titre secondaire
Pour écrire une liste
Smiley
:bond:
:boxe:
:bsmile:
:bump:
:clap:
:coeur:
:cool:
:cry:
:eek:
:evil:
:fleur:
:fou2:
:fou:
:grin:
:grrr:
:hammer:
:hippy:
:hum:
:idee2:
:idee:
:kdo:
:king:
:ko:
:lol:
:love2:
:love:
:mad:
:maitre:
:noel:
:oops:
:raa:
:razz:
:roll:
:sad:
:skull:
:smile:
:timide:
:trink:
:vice:
:vomi:
:wink:
:zzz: