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] Perdu avec strtotime et différence de temps


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 174
    Par défaut [Dates] Perdu avec strtotime et différence de temps
    Bonjour,

    Je dois calculer le nombre d'heures ou jour écouler entre deux dates.

    Je suis passé par strtotime pour transformer ma date en date unix. J'ai procédé comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function calcul_delais($heureDeb,$heureFin,$jourDeb,$jourFin)
     {
        $dif=strtotime($jourFin)-strtotime($jourDeb);
     
    	echo date('h:i:s',$dif);
     
     
     }
     
     echo calcul_delais('','','2008-09-01 08:00:00','2008-09-01 09:00:00');
    Je voudrais qu'il m'affiche 1h, mais il m'affiche 02:00:00. Si j'affiche la date, il se ramène au 1 janvier 1970

    Je ne sais donc pas comment faire pour effectuer une différence entre deux dates unix et les ramener en dates normales...
    Quelqu'un peut-il m'éclairer?

  2. #2
    Membre éprouvé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Par défaut
    tu peux comparer deux timestamp
    puis après le convertir en date (avec strtotime)

  3. #3
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 174
    Par défaut
    Citation Envoyé par sliderman Voir le message
    tu peux comparer deux timestamp
    puis après le convertir en date (avec strtotime)
    je dois mal me débrouiller, je trouve -1

  4. #4
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 174
    Par défaut
    Il y a quelque chose que je ne comprends pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $heuredeb=explode(":",$heureDeb);
    $heurefin=explode(":",$heureFin);
     
     
     
     
     
    $heureDeb=mktime($heuredeb[0],$heuredeb[1],$heuredeb[2],01,01,2009);
    $heureFin=mktime($heurefin[0],$heurefin[1],$heurefin[2],01,01,2009);
     
    echo $heureDeb." ";
    echo $heureFin." ";
    echo Date("Y",($heureFin-$heureDeb));
    echo Date("H:i:s", $heureFin-$heureDeb);

    J'obtiens bien qu'il y a une différence d'une heure si heuredeb= 08:00:00 et heurefin=09:00:00.

    Au niveau des dates, quelque soit l'affichage, je tombe sur 1970....

  5. #5
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    C'est tout à fait logique, que tu retrouves 1970, puisque c'est l'année de départ des timestamps.
    tu fais (2008-09-07 09:00:00) - (2008-09-07 08:00:00) tu obtiens 01:00:00 le 31 décembre 1970 (c'est à dire date 0 en timestamp)
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  6. #6
    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
    Citation Envoyé par Maljuna Kris Voir le message
    C'est tout à fait logique, que tu retrouves 1970, puisque c'est l'année de départ des timestamps.
    tu fais (2008-09-07 09:00:00) - (2008-09-07 08:00:00) tu obtiens 01:00:00 le 31 décembre 1970 (c'est à dire date 0 en timestamp)
    Rectification :
    Dans notre fuseau horaire (Europe/Paris), le timestamp 0 est le 1er janvier 1970 à 01:00:00.

  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
    Ce n'est pas ce que tu as demandé dans ton premier message :
    Citation Envoyé par skystef Voir le message
    Je dois calculer le nombre d'heures ou jour écouler entre deux dates.
    Cela dit, tu peux essayer un truc comme ç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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <?php
      function dateUTC($date)
      {
        $laDate = new DateTime($date);
        $offset = ($laDate -> getOffset()) * - 1;
        $modification = ($offset < 0) ? $offset . ' seconds' : '+' . $offset . ' seconds';
        $laDate -> modify($modification);
        return $laDate -> format('Y-m-d H:i:s');
      }
     
      function mefMsg($ecart)
      {
        $difference = explode(':', $ecart);
        if (array_sum($difference) > 0)
        {
          $periode = array(' heure(s) ', ' minute(s) ', ' seconde(s) ');
          $msg = 'Il y a ';
          foreach ($difference as $cle => $valeur)
          {
            if ($valeur > 0)
            {
              $msg .= ($valeur * 1) . $periode[$cle];
            }
          }
          $msg .= 'd\'écart.';
        }
        else 
        {
          $msg = 'Il n\'y a pas d\'écart.';
        }
     
        return $msg;
      }
    //------------------------------------------------------------------------  
    //------------------------------------------------------------------------
      $debut = '2008-10-08 23:00:00';
      $fin = '2008-10-09 01:15:30';
     
      $debut = dateUTC($debut);
      $fin = dateUTC($fin);
     
      date_default_timezone_set('UTC');
     
      $ecart = strtotime($fin) - strtotime($debut);
     
      $msg = mefMsg(date('G:i:s', $ecart));
      echo $msg . '<br>';
    ?>
    Ce code est exécuter en sensiblement 1 millième de seconde, et ne fonctionne pas au-delà d'un écart de 23 h 59 m 59 s. Pour aller au-delà, il faut calculer l'écart différemment.

  8. #8
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 174
    Par défaut
    Citation Envoyé par jeca Voir le message
    Ce n'est pas ce que tu as demandé dans ton premier message :

    Cela dit, tu peux essayer un truc comme ç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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <?php
      function dateUTC($date)
      {
        $laDate = new DateTime($date);
        $offset = ($laDate -> getOffset()) * - 1;
        $modification = ($offset < 0) ? $offset . ' seconds' : '+' . $offset . ' seconds';
        $laDate -> modify($modification);
        return $laDate -> format('Y-m-d H:i:s');
      }
     
      function mefMsg($ecart)
      {
        $difference = explode(':', $ecart);
        if (array_sum($difference) > 0)
        {
          $periode = array(' heure(s) ', ' minute(s) ', ' seconde(s) ');
          $msg = 'Il y a ';
          foreach ($difference as $cle => $valeur)
          {
            if ($valeur > 0)
            {
              $msg .= ($valeur * 1) . $periode[$cle];
            }
          }
          $msg .= 'd\'écart.';
        }
        else 
        {
          $msg = 'Il n\'y a pas d\'écart.';
        }
     
        return $msg;
      }
    //------------------------------------------------------------------------  
    //------------------------------------------------------------------------
      $debut = '2008-10-08 23:00:00';
      $fin = '2008-10-09 01:15:30';
     
      $debut = dateUTC($debut);
      $fin = dateUTC($fin);
     
      date_default_timezone_set('UTC');
     
      $ecart = strtotime($fin) - strtotime($debut);
     
      $msg = mefMsg(date('G:i:s', $ecart));
      echo $msg . '<br>';
    ?>
    Ce code est exécuter en sensiblement 1 millième de seconde, et ne fonctionne pas au-delà d'un écart de 23 h 59 m 59 s. Pour aller au-delà, il faut calculer l'écart différemment.

    Merci pour l'aide

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/07/2015, 12h13
  2. Différence de temps (dates et heures)
    Par Taratis dans le forum Langage
    Réponses: 10
    Dernier message: 29/01/2012, 17h21
  3. [Dates] problème avec strtotime
    Par grinder59 dans le forum Langage
    Réponses: 5
    Dernier message: 24/08/2007, 17h40
  4. [Dates] Date avec strtotime('next ...')
    Par lusitano11 dans le forum Langage
    Réponses: 2
    Dernier message: 18/01/2006, 00h03

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