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] Problème de différence d'heure ( manipulation de timestamp)


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 96
    Par défaut [Dates] Problème de différence d'heure ( manipulation de timestamp)
    Je veux créer une fonction qui fait la différence entre 2 heures au format
    hh.mm

    J'ai donc écris les fonctions suivantes :

    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
    21
    22
    23
     
    // Heure sous la forme hh.mm
    function HeureToTimeStamp($heure)
    {
    list($hour,$minute) = explode('.', $heure);
    $timestamp = mktime($hour,$minute);
    return $timestamp;
    }
     
     
    function TimeStampToHeure($timestamp)
    {
    return date('H.i',$timestamp);
    }
     
     
    function DiffHeure($HeureDebut, $HeureFin)
    {	
    	$HDTimeStamp = HeureToTimeStamp($HeureDebut);
    	$HFTimeStamp = HeureToTimeStamp($HeureFin);
    	$HeureFinaleTimeStamp = $HFTimeStamp - $HDTimeStamp;
    	return TimeStampToHeure($HeureFinaleTimeStamp);
    }
    Malheureusement j'obtiens des résultats hasardeux du style
    DiffHeure(23.5,5)
    Retourne 06.55

    Une idée ?

  2. #2
    Membre émérite
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par défaut
    Heuuu tu veux une fonction qui donne le temps écoulé entre 2 dates (heures ?)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function Dif($date1, $date2)
    {
        $dif_en_sec = $date2 - $date1
        return floor($dif_en_sec / 3600).'H'.floor(($dif_en_sec % 3600) / 60).'Min'.floor(($dif_en_sec % 60)).'sec';
    }
    (fonction écrite vite fait a la volée, a tester donc)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 96
    Par défaut
    Merci de ta réponse mais ça ne corrige pas mon problème de code.

    Quant à ta fonction elle ne renvoit pas le bon résultat :
    Dif(13,22.5);
    retourne 0H0Min9sec
    et non 9.5 .

  4. #4
    Membre émérite
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par défaut
    ah ok ! tu veux gérer ça comme ça... Ajoute au debut de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $date1 = substr($date1, 0, strpos($date1, '.'))*3600 +  substr($date1, strpos($date1, '.'))*60;
    $date2 = substr($date2, 0, strpos($date1, '.'))*3600 +  substr($date2, strpos($date2, '.'))*60;
    Ca sous entend que 10.5 corresponde a 10h50 (et non 10h30) !

  5. #5
    Membre Expert

    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
    Par défaut
    Bonjour,

    Essaie avec ça :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <?php
      function diffHeure($tempsDeb, $tempsFin)
      {
        //-- calcul en heures et minutes -----------
        list($hDeb, $mDeb) = explode('.', $tempsDeb);
        list($hFin, $mFin) = explode('.', $tempsFin);
     
        $TStempsDeb = ($hDeb * 60) + $mDeb;
        $TStempsFin = ($hFin * 60) + $mFin;
     
        $TSecart = 0;
        if($TStempsDeb > $TStempsFin)
        {
          //-- calcul écart entre début et minuit ----------
          $TSecart += (24 * 60) - $TStempsDeb;
          //-- ajoute le temps après minuit ---------
          $TSecart += $TStempsFin;
        }
        else if($TStempsDeb < $TStempsFin)
        {
          $TSecart += $TStempsFin - $TStempsDeb;
        }
     
        $ecart = floor($TSecart / 60) . '.' . ($TSecart % 60);
        return $ecart;
      }
    //----------------------------------------  
    //----------------------------------------  
      $tempsDeb = '23.50';
      $tempsFin = '5.00';
     
      echo diffHeure($tempsDeb, $tempsFin);
    ?>

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 96
    Par défaut
    Citation Envoyé par gloubi Voir le message
    ah ok ! tu veux gérer ça comme ça... Ajoute au debut de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $date1 = substr($date1, 0, strpos($date1, '.'))*3600 +  substr($date1, strpos($date1, '.'))*60;
    $date2 = substr($date2, 0, strpos($date1, '.'))*3600 +  substr($date2, strpos($date2, '.'))*60;
    @gloubi :Ca sous entend que 10.5 corresponde a 10h50 (et non 10h30) !
    Non ça ne sous entend pas ça :
    Ecart entre 22.5 et 13 = 9.5 signifie qu'on prend 22.5 comme 22h30 !
    Merci quand même pour ta réponse.

    @jeca : Ca ressemble un peu plus à ce que je veux, mais je trouve le même style de résultats qu'avec ma fonction c'est à dire des O.55 au lieu de O.5 par exemple :
    diffHeure(23.5,5) retourne 5.55 et non 5.5.

    Je dois avoir loupé une subtilité quelque part.

  7. #7
    Membre Expert

    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
    Par défaut
    Pour les valeurs que tu donnes (23.5 et 5), ma fonction retourne un message d'erreur, ce qui est normal : en effet, tu as précisé dans ton 1er message que les heures sont en heures et minutes. Or le format des valeurs que tu donnes est incorrect dans ce cas ; ce devrait être 23.50 et 5.00, ce qui retourne 5.10, c'est-à-dire 5 heures et 10 minutes, résultat correct.

    Or, il s'avère qu'elles sont en heures et centièmes d'heure ; ce qui n'est pas du tout la même chose.

    Et dans ce cas :
    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
    21
    22
    23
    24
    25
    26
    <?php
      function diffHeure($tempsDeb, $tempsFin)
      {
        //-- calcul en heures et centièmes -----------
        $ecart = 0;
        if($tempsDeb > $tempsFin)
        {
          //-- calcul écart entre début et minuit ----------
          $ecart += 24 - $tempsDeb;
          //-- ajoute le temps après minuit ---------
          $ecart += $tempsFin;
        }
        else if($tempsDeb < $tempsFin)
        {
          $ecart += $tempsFin - $tempsDeb;
        }
     
        return $ecart;
      }
    //----------------------------------------  
    //----------------------------------------  
      $tempsDeb = '23.5';
      $tempsFin = '5';
     
      echo diffHeure($tempsDeb, $tempsFin);
    ?>
    retourne bien 5.5

    Il est entendu aussi que l'écart maximum ne peut être que de 24 heures, car il n'y a pas de notion de date.

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

Discussions similaires

  1. [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
  2. [Dates] Problème avec heure d'été
    Par crashou13 dans le forum Langage
    Réponses: 2
    Dernier message: 02/03/2007, 15h41
  3. [Dates] Problème avec date (heure qui varie)
    Par Death83 dans le forum Langage
    Réponses: 10
    Dernier message: 05/08/2006, 02h19
  4. [Dates] Problème avec des dates et Heures
    Par snakejl dans le forum Langage
    Réponses: 9
    Dernier message: 16/05/2006, 18h04
  5. Différence date .. problème #Erreur
    Par priest69 dans le forum Access
    Réponses: 1
    Dernier message: 06/10/2005, 15h04

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