IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Pour mon PHP, le lendemain du samedi est un lundi [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre expérimenté Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 886
    Points : 1 526
    Points
    1 526
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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:

    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 ?

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Pas vraiment d'idée d'autant plus que chez moi c'est correct

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    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 : 573
    Points : 915
    Points
    915
    Par défaut
    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é...

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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');
      }
    ?>

  5. #5
    Membre expérimenté Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 886
    Points : 1 526
    Points
    1 526
    Par défaut
    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 !

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    il faut utiliser strtotime

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mybase est il suffisant pour mon application?
    Par jeff69 dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/10/2006, 12h39
  2. Réponses: 1
    Dernier message: 05/09/2006, 10h25
  3. Pour mon petit jeux de voiture en php
    Par schtek2 dans le forum Jeux web
    Réponses: 3
    Dernier message: 15/08/2006, 18h07
  4. Réponses: 1
    Dernier message: 07/01/2006, 15h01
  5. Le JPanel est trop reduit pour mon interface !
    Par LeNeutrino dans le forum JBuilder
    Réponses: 4
    Dernier message: 25/07/2005, 18h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo