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] Mauvais résultats sur différence d'heures


Sujet :

Langage PHP

  1. #1
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut [Dates] Mauvais résultats sur différence d'heures
    Une question qui vous semblera surement triviale, mais moi je colle.

    Le code suivant me retourne 5 heures, alors qu'évidement, je devrais recevoir 4 heures.

    Si j'affiche la différence entre les 2 TS, et que je divise par 3600, j'obtiens bien 4 heures. Le mistère est total pour moi.

    Merci d'avance

    Thierry

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $f = strtotime("2007/10/01 12:00:00");
    $d = strtotime("2007/10/01 8:00:00");
     
    $h = $f - $d;
    echo date("H:i", $h)."<br>";

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 228
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 228
    Points : 8 487
    Points
    8 487
    Billets dans le blog
    17
    Par défaut
    date( ) formate un timestamp et le localise (contrairement à gmdate( )).
    => Sûrement un pb de fuseau horaire.

  3. #3
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    C'est a peu pres ca, en gros là, ta date correspond au premier janvier 1970 a 5h du matin heure locale à la france.
    Si tu veux afficher le nombre d'heures séparant deux dates affiche directement $h/3600 et pas date(..., $h).

  4. #4
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut Bien vu
    Meri Séb

    Je vais m'endormir moins idiot ce soir. Ca marche nickel, on sent qu'il y a du vécu la dedans

    Je ne connaissais pas gmdate, je vais appronfir un peu le sujet pour comprendre pour le fuseaux horaire serait en cause?

    Thierry

  5. #5
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    merci koopajah, mais je ne comprends pas bien ce que tu veux dire.

    Mon problème se situe en fait pour calculer le temps écoulé entre deux variables au format time de MySQL.

    Peux tu me préciser un peu ce que tu veux dire par:
    affiche directement $h/3600

  6. #6
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    strtotime() te renvoie le nombre de secondes écoulées entre ta date et le 1er janvier 1970 à 00h. Du coup, pour connaitre le nombre d'heures séparant deux dates, tu récupères le nombre de secondes séparant ces deux dates (ca c'est ce que tu fais) et ensuite tu utilises la fonction date() pour afficher le nombre d'heures au format hh:mm et c'est la que c'est faux !

    tu as x secondes entre tes deux dates (que tu stockes dans la variable $h). Si tu veux le nombre d'heures entre ces deux dates il faut faire $h/3600.

    En utilisant la fonction date tu lui dis "dis moi a quelle date correspond le timestamp 14400 secondes (correspondant a une différence de 4 heures). PHP calcule donc quelle est la date 14400 secondes après le 01 janvier 1970 à 00h00 ca donne donc le 01 janvier 1970 a 04:00 (heure GMT). Comme on est en France et que ton php est surement configuré comme ca, il en déduit que 14400 secondes comme timestamp c'est le 01 janvier 1970 a 05:00 du matin (+1 heure par rapport à GTM (Greenwich Time)). D'où ton probleme.

    En gros, ta différence de timestamp est un nombre de secondes, c'est plus du tout un timestamp il faut donc l'afficher à la main sans utiliser une fonction de date qui n'est pas faite pour ca

  7. #7
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 228
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 228
    Points : 8 487
    Points
    8 487
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par koopajah Voir le message
    En gros, ta différence de timestamp est un nombre de secondes, c'est plus du tout un timestamp il faut donc l'afficher à la main sans utiliser une fonction de date qui n'est pas faite pour ca
    Exactement

  8. #8
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    Voilà une répnse qui est claire koopajah. Merci.

    En fait avec la fonction gmdate(), ca marche carrément bien. Celle-ci à l'avantage de me retourner aussi le nombre de minutes d'écart entre les deux "time". Ceci m'évitera de créer une fonction qui va me calculer la différence en heure, minutes et seconde.

    A moins bien sur qu'il est ai des contreindications à utiliser une gmdate()?

    Merci les gars.

    Thierry

  9. #9
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Des contreindications, non, mais ce qui est sur c'est que la fonction n'est pas faite pour ca déjà, et ensuite si tu as 32heures de différences entre les deux dates ca te marquer 08h00 et pas 32h00 (en gros si tes deux dates sont distantes de plus de 24 heures quoi).

  10. #10
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    Effectivement, j'en ai fait les frais. Mais il est parfois nécessaire d'apprendre par l'erreur.
    J'ai solutionné la question avec une petite fonction de rien du tout, qui me retourne des heures au format decimal. Ceci est très pratique quand les temps doivent être mutiplier avec des montants en €.

    Je n'imgine pas un instant être le seul à avoir eu ces problèmes

    Merci pour le coup de main.

    Thierry

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

Discussions similaires

  1. [Hibernate] Criteria sur différence entre deux dates ?
    Par nesbla dans le forum Hibernate
    Réponses: 1
    Dernier message: 27/06/2007, 10h10
  2. [DATE] Différence en heure par rapport à un intervalle d'heure
    Par Katachana dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 04/06/2007, 16h08
  3. différence entre deux dates : des résultats curieux
    Par Herode dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/04/2007, 17h14
  4. Différence d'heure sur access
    Par dddodo dans le forum Access
    Réponses: 9
    Dernier message: 28/12/2006, 11h31
  5. [Dates] Calcul d'une différence entre deux heures
    Par loreleï85 dans le forum Langage
    Réponses: 12
    Dernier message: 28/06/2006, 11h43

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