Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/02/2011, 00h22   #1
Membre émérite
 
Avatar de 10_GOTO_10
 
Inscription : juillet 2004
Messages : 710
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 710
Points : 838
Points : 838
Par défaut Pour mon PHP, le lendemain du samedi est un lundi

J'ai un comportement très étrange dans un calendrier en PHP. Je n'aime pas crier au bug, mais là ça y ressemble étrangement, à moins d'une subtilité que je n'aurais pas saisi ?

Ca se concrétise avec ce code:

Code :
1
2
echo date("d/m/Y", 1301179160)."<br/>";
echo date("d/m/Y", 1301265560)."<br/>";
1301265560 = 1301179160 + 24 * 60 * 60 (soit un jour)

Résultat:

Citation:
26/03/2011
28/03/2011
Conclusion: le lendemain du samedi 26 mars est le lundi 28 mars...

J'ai testé en local sur mon poste (EasyPHP 5.3.5) et sur le serveur de mon hébergeur, testé sur deux postes différents avec toujours le même résultat.

Une idée ?
__________________
Sondages gratuits : Le troc d'opinions
10_GOTO_10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 01h30   #2
Membre Expert
 
Inscription : septembre 2010
Messages : 1 239
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 239
Points : 1 561
Points : 1 561
Pas vraiment d'idée d'autant plus que chez moi c'est correct

Code :
1
2
3
4
echo date("d/m/Y H:i:s",1301179160)."<br/>";
//26/03/2011 22:39:20
echo date("d/m/Y H:i:s",1301265560)."<br/>";
//27/03/2011 22:39:20
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 03h16   #3
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 586
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 586
Points : 859
Points : 859
c'est le passage à l'heure d'été (dernier dimanche de mars et ca tombe le 27 mars cette année...), plus une heure d'où ton 28/03/2011 00:39 au lieu du 27/03/2011 à 23:39 ; c'est la seule explication que je vois...
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/02/2011, 05h40   #4
Membre Expert
 
Inscription : août 2002
Messages : 1 036
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 1 036
Points : 1 166
Points : 1 166
Bonjour,

Citation:
Envoyé par vorace Voir le message
c'est le passage à l'heure d'été
+1

Dans le fuseau horaire de Paris, le timestamp indiqué pour le 26/03 est à 23 H 39 mn 20s. Porquoi ne pas utiliser le timestamp à 00 H ?
Code :
1
2
3
4
5
6
<?php
  echo date("d/m/Y H:i:s", 1301094000)."<br/>";
  //--- donne 26/03/2011 00:00:00 ----------------------------------------------
  echo date("d/m/Y H:i:s", 1301094000 + 86400)."<br/>";
  //--- donne 27/03/2011 00:00:00 ----------------------------------------------
?>
Cela dit, pour un calendrier, j'aurais plutôt tendance à utiliser la classe "DateTime". Exemple pour le mois de mars 2011 :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
  date_default_timezone_set('Europe/Paris');
 
  $anneeMois = '2011-03';
  $deb = new DateTime($anneeMois . '-01');
  $nbJour = $deb -> format('t');
  $fin = new DateTime($anneeMois . '-' . $nbJour);
 
  while ($deb <= $fin)
  {
    echo $deb -> format('d/m/Y') . '<br />';
    $deb -> modify('+1 day');
  }
?>
jeca est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 09h50   #5
Membre émérite
 
Avatar de 10_GOTO_10
 
Inscription : juillet 2004
Messages : 710
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 710
Points : 838
Points : 838
Citation:
Envoyé par vorace Voir le message
c'est le passage à l'heure d'été (dernier dimanche de mars et ca tombe le 27 mars cette année...), plus une heure d'où ton 28/03/2011 00:39 au lieu du 27/03/2011 à 23:39 ; c'est la seule explication que je vois...
Bien vu. Effectivement.

Citation:
Envoyé par jeca Voir le message
Dans le fuseau horaire de Paris, le timestamp indiqué pour le 26/03 est à 23 H 39 mn 20s. Porquoi ne pas utiliser le timestamp à 00 H ?
Parce que je démarre mon calendrier au jour d'aujourd'hui donc je prend le timestamp courant et je rajoute ensuite 24 heures pour chaque jour. Lorsque j'ai constaté le bug, il devait effectivement être 23H 39. Mais c'était une erreur, visiblement.

Merki !
__________________
Sondages gratuits : Le troc d'opinions
10_GOTO_10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 09h54   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 465
Points : 8 465
il faut utiliser strtotime

Code :
1
2
3
4
echo date("d/m/Y H:i:s",1301179160)."<br/>";
//26/03/2011 22:39:20
echo date("d/m/Y H:i:s", strtotime('+1 day', 1301179160))."<br/>";
//27/03/2011 23:39:20
jamais faire de calcule sur les dates puisque :
1 jour != 24h
1 mois != 30 jours
1 année != 365 jours
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h49.


 
 
 
 
Partenaires

Hébergement Web