OVH Cloud OVH Cloud

bog de strtotime en PHP

3 réponses
Avatar
ali.aberkane
Bonjour,
J'ai executé cette ligne en php : print strtotime("2005-10-30
23:00:00")-strtotime("2005-10-30 00:00:00");
et j'ai constaté qu'elle donne une difference de 24 heures au lieu de
23 heures, comment cela est possible?
serait ce un bog ou c'est moi que me plante sur toute la ligne?
Cordialement, hasni.

3 réponses

Avatar
Olivier Miakinen

J'ai executé cette ligne en php : print strtotime("2005-10-30
23:00:00")-strtotime("2005-10-30 00:00:00");


C'est par hasard que tu as choisi cette date du 30 octobre 2005, ou bien
tu as testé plusieurs dates avant de tomber sur le problème ?

et j'ai constaté qu'elle donne une difference de 24 heures au lieu de
23 heures, comment cela est possible?


Si tu habites en France ou dans l'un de quelques autres pays d'europe,
alors tu as bénéficié d'un changement d'heure locale, précisément le 30
octobre 2005 à 1 heure du matin (en temps universel). Pour la France,
par exemple, c'est à 3 heures du matin (heure d'été) que l'on est passé
à 2 heures (heure d'hiver). Entre 0 h et 23 h, il s'est donc écoulé
3 heures de 0 h à 3 h, puis 21 heures de 2 h à 23 h, pour un total de
3 + 21 = 24 heures.

C.Q.F.D.

--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)

Avatar
Olivier Miakinen
Le 18/01/2006 23:23, je répondais à Hasni Ali Aberkane :

J'ai executé cette ligne en php : print strtotime("2005-10-30
23:00:00")-strtotime("2005-10-30 00:00:00");


[ 30 octobre 2005 ] Entre 0 h et 23 h, il s'est donc écoulé 3 heures
de 0 h à 3 h, puis 21 heures de 2 h à 23 h, pour un total de 3 + 21 > 24 heures.


Pour dire les choses autrement :
- à 0 h le 30 octobre 2005, heure française, il était 22 h
le 29 octobre 2005 en temps universel ;
- à 23 h le 30 octobre 2005, heure française, il était 22 h
le 30 octobre 2005 en temps universel ;
- or entre 22 h d'un jour et 22 h du lendemain il s'est bien
écoulé 24 heures.

Re-C.Q.F.D.

--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)


Avatar
hasni
Je ne l'ai pas trouve par hasard.
C'est en faisant une requette sur une base de donnees, en groupant les
resultats par jour. Je devais apres dessiner un graphique de ces
resultats ou les abscisses sont les jours : exemple :
periode du 20/10/2005 00:00 au 20/10/2005 23:59
periode du 21/10/2005 00:00 au 21/10/2005 23:59
....
etc.
Ces periodes sont générées en PHP en utilisant le strtotime, et pour
ma grande surprise je suis tombé sur ce problème que je dois
detourner, car la requete SQL se base sur une chaine de caractere "
SELECT DATE_FORMAT( $referencedate , '%d %b %Y' ) AS 'Jour', ...
GROUP BY 'JOUR'"
Merci pour votre aide, j'ai carrement oublié le changement d'heure!!
Ali.