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 :

[Dates] Naviguer d'heures en heures : bug PHP


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5
    Par défaut [Dates] Naviguer d'heures en heures : bug PHP
    Bonjour, je suis confronté à un bug PHP bien énervant sur les dates.

    Contexte :
    Je dois reculer dans le temps afin de récupérer toutes les heures qui matchent une condition.

    Pour celà j'utilise la fonction suivante dans une bouche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $timeStamp = strtotime('-1 hour',$timeStamp);
    Seulement, je suis confronté à un bug PHP : lorsque l'on arrive sur une date correspondant au changement d'heure (ex : 28 mars 2010 à 3 heures du matin), la fonction strtotime perds pieds et renvoie toujours la même date !

    Vous pouvez reproduire le bug à l'aide des 2 codes suivants (attention, boucles infinies) :

    Code 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $timeStamp = time();
    while (true) {
        echo date('Y-m-d H',$timeStamp)."\n";
        $timeStamp = strtotime('-1 hour',$timeStamp);
    }
    Code 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $dateTime = new DateTime(date('Ymd H:i',time()));
    while (true) {
        echo $dateTime->format('Y-m-d H')."\n";
        $dateTime->modify('-1 hour');
    }
    J'utilise PHP 5.2 (testé sur 5.0.2 et 5.2.13).
    Reproduisez-vous sur PHP 5.2 ?
    Le bug est-il toujours présent sur PHP 5.3 ?

    Merci d'avance pour votre aide.

  2. #2
    Membre émérite
    Homme Profil pro
    Touche à tout informatique autodidacte
    Inscrit en
    Janvier 2007
    Messages
    811
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Touche à tout informatique autodidacte

    Informations forums :
    Inscription : Janvier 2007
    Messages : 811
    Par défaut
    Bonjour,
    J'ai essayé ton code avec Php 5.3.2, je n'ai pas ce problème. Mais il faut savoir aussi que les résultats de la fonction strtotime dépendent de beaucoup de la variable d'environnement TZ. Depuis PHP 5.1.0, il y a une façon simple de définir un fuseau horaire à utiliser avec toutes les fonctions de date/heure. Le processus est expliqué dans la page du manuel de la fonction date_default_timezone_get().

    Essaye de voir dans ton php.ini si tu as bien configuré les directives de [Date] surtout date.timezone.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5
    Par défaut
    Merci pour ta réponse.

    Le TimeZone est déjà paramétré.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    date_default_timezone_set ('Europe/Paris');
    Merci pour le test avec PHP 5.3. Le bug semble donc ne se produire qu'en PHP <= 5.2

    D'autres personnes ont-il ce problème en PHP 5.2 ?

    Pour info j'ai bypasser le problème comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    $dateTime = new DateTime(date('Ymd H:i'));
    $lastDate = '';
    while(count($datesToUse) < $history)
    {
    	// Date en cours
    	$currentDate = $dateTime->format($format);
     
    	// Pour éviter un bug PHP, on test le changement
    	$nbStep = '1';
    	if($lastDate == $currentDate)
    		$nbStep = '2';
     
    	// [...]
     
    	// On descend dans l'historique
    	$dateTime->modify("-$nbStep hour");
     
    	// On mémorise la dernière date
    	$lastDate = $currentDate;
    }
    Celà revient à "sauter" l'heure qui bloque.

Discussions similaires

  1. Comment changer la date système sans changer l'heure?
    Par pointer dans le forum Langage
    Réponses: 7
    Dernier message: 18/05/2010, 09h55
  2. [Date] Décalage au passage à l'heure d'hiver
    Par tatia34 dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 06/12/2007, 14h47
  3. Réponses: 9
    Dernier message: 13/04/2006, 11h46
  4. Selectionner les date qui ont minimum une heure d'ecart
    Par uraxyd dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/07/2005, 13h39
  5. [Date][SQL date][Format] insertion d'une heure
    Par goulime dans le forum JDBC
    Réponses: 11
    Dernier message: 26/01/2004, 11h38

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