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 :

Calculer la différence entre deux dates en heure


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Par défaut Calculer la différence entre deux dates en heure
    Bonsoir,

    Voila je souhaite retourner le nombres d'heures entre deux 'datetime' qui sont au format "Y-m-d H:i", voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $date1 = date("Y-m-d H:i", strtotime($datetime_debut));
    $date2 = date("Y-m-d H:i", strtotime($datetime_fin));
    $delai = strtotime($date2) - strtotime($date1); 
    $time_h = ($delai/60)/60; 
    echo $time_h ." Heures";
    Celui ci me retourne correctement le nombre d'heures entre deux dates, si les deux dates sont de la même journée, mais du moment ou je rentre deux dates différente le nombres d'heure qui les sépare est dans les choux :
    exemple :
    $datetime_debut = 11/07/2015 22:00
    $datetime_fin = 12/07/2015 02:00
    700 Heures
    alors que je devrais avoir 4 heures, comment cela se fait il ???

  2. #2
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    657
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 657
    Par défaut
    Bonsoir,

    C'est normal qu'il trouve 700 heures car strtotime() prends en compte tes dates au format américain, du coup il trouve quasi 1 mois de différence.

    Petit rappel:

    Format américain : mm/dd/YYYY
    Format européen : dd/mm/YYYY

    Du coup, tu as le choix :

    - Soit tu utilises DateTime qui permet plus de choses (PHP 5.2+)
    - Soit tu formates tes dates au format anglais
    - Soit tu formates tes dates avec des '-' au lieu des '/', dans ce cas la, strtotime() prendra tes dates au bon format, comme la doc' le précise :

    Note:
    Les dates aux formats m/d/y ou d-m-y sont analysées en regardant le séparateur entre les différentes parties : si le séparateur est un slash (/), alors le format américain m/d/y est supposé ; si le séparateur est un tiret (-) ou un point (.), alors le format Européen d-m-y sera supposé.
    Pour éviter des ambiguïtés éventuelles, le mieux est d'utiliser le format ISO 8601 (YYYY-MM-DD) ou encore d'utiliser la méthode DateTime::createFromFormat() lorsque c'est possible.
    En espérant avoir éclairée ta lanterne

  3. #3
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 414
    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 414
    Par défaut
    Peut-être avec DateTime::diff
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $datetime_debut = '11/07/2015 22:00';
    $datetime_fin = '12/07/2015 02:00';
     
    $date1 = DateTime::createFromFormat('d/m/Y G:i', $datetime_debut);
    $date2 = DateTime::createFromFormat('d/m/Y G:i', $datetime_fin);
     
    $interval = $date1->diff($date2);
     
    $heures = $interval->days*24 + $interval->h;
     
    echo $heures . ' heures';
    (createFromFormat est utilisé pour créer un objet datetime valide à partir d'un format de date non standard)

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Par défaut
    ok merci pour vos conseils j'ai utilisé diff qui fonctionne a merveille

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

Discussions similaires

  1. [AC-2007] Requête SQL différence entre deux date en heure
    Par sarah12 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 21/07/2010, 20h58
  2. Calculer une différence entre deux dates
    Par attif0709 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/04/2010, 12h06
  3. [AC-2003] Calcul de différence entre deux dates : problème de format
    Par sinifroth dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 22/01/2010, 15h35
  4. Calcul de différence entre deux dates cas vaut 0
    Par zanoubya dans le forum Débuter
    Réponses: 3
    Dernier message: 25/12/2008, 19h45
  5. Calculer la différence entre deux dates
    Par drthodt dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 18/12/2007, 08h27

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