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] Calcul d'une différence entre deux heures


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Points : 50
    Points
    50
    Par défaut [Dates] Calcul d'une différence entre deux heures
    Bonjour,

    J'ai dans ma base de données trois champs time : heure_arrivée, heure_départ et durée. L'utilisateur remplis les champs heure_arrivée et heure_depart lors de l'insertion d'un enregistrement. Je voudrais calculer la différence entre ces deux dates afin de pouvoir remplir le champ durée.

    J'ai essayé de faire juste une différence entre les deux variables mais il me met toujours 1seconde de différence...

    Ca doit surement etre simple, mais je ne vois pas comment faire!

    Merci d'avance pour vos réponses.

  2. #2
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    tes heures sont systématiquement dans la même journée ?

    si oui, Essaye de transformer tes heures en timestamp, avec une date bidon. il ne te restera plus qu'à soustraire l'une par l'autre pour obtenir le nombre de secondes entre les deux... je te laisse convertir en heures
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  3. #3
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Points : 50
    Points
    50
    Par défaut
    Oui mes heures sont dans la même journée.

    Je vais essayer cela!
    Merci!

  4. #4
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Sinon il y a une requête SQL qui s'appelle DATEDIFF(dat1, date2).

  5. #5
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Points : 50
    Points
    50
    Par défaut
    J' ai essayé d'utiliser datediff, mais je dois mal m'y prendre...
    Il me dit que j'ai une erreur de syntaxe.

    Voilà le code de ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    $insertSQL = "INSERT INTO intervention (id_intervenant, id_client, heure_arrivee, heure_depart, date_intervention, duree_intervention) 
    VALUES ( '".$_POST['select2']."', '".$_POST['select']."', '".$_POST['heure_arrivee']."', '".$_POST['heure_depart']."', '".$_POST['date']."', DATEDIFF(hour, '".$_POST['heure_depart']."', '".$_POST['heure_arrivee']."')";
     
    echo $insertSQL;              
     
    $Result1 = mysql_query($insertSQL, $aloa) or die(mysql_error());
    Voilà le echo de $insert SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    INSERT INTO intervention (id_intervenant, id_client, heure_arrivee, heure_depart, date_intervention, duree_intervention) VALUES ( '2', '1', '14:00:00', '15:00:00', '2006-06-28', DATEDIFF(hour, '15:00:00', '14:00:00')
    Erreur de syntaxe près de ' '14:00:00')' à la ligne 1

  6. #6
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    il te manque une parenthese deja

  7. #7
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Points : 50
    Points
    50
    Par défaut
    C'est vrai, j'avais pa vu. Mais il me dit toujours la même chose.

  8. #8
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 85
    Points : 89
    Points
    89
    Par défaut
    http://dev.mysql.com/doc/refman/5.0/...functions.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DATEDIFF(expr,expr2) 
     
    DATEDIFF() retourne le nombre de jours entre la date de début expr et la
    date de fin expr2. expr et expr2 sont des expressions de type DATE ou
    DATETIME. Seule la partie DATE est utilisée dans le calcul.
    Utilises peut etre SUBTIME(expr1,expr2)

    ou TIMEDIFF

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    TIMEDIFF(expr,expr2) 
     
    TIMEDIFF() retourne la durée entre l'heure de début expr et l'heure de fin
    expr2. expr et expr2 sont des expressions de type TIME ou DATETIME, et
    doivent être de même type.

  9. #9
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $insertSQL = "INSERT INTO intervention (id_intervenant, id_client, heure_arrivee, heure_depart, date_intervention, duree_intervention) 
    VALUES ( '".$_POST['select2']."', '".$_POST['select']."', '".$_POST['heure_arrivee']."', '".$_POST['heure_depart']."', '".$_POST['date']."', DATEDIFF('".$_POST['heure_depart']."', '".$_POST['heure_arrivee']."')";

    N'oublie pas les deux dates doivent etres formatées et du même type (AAAA-MM-JJ HH:MM:SS)

  10. #10
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    si tu veux une difference d'HEURES et pas de DATES, c'est pas DATEDIFF qu'il faut utiliser...

    http://dev.mysql.com/doc/refman/4.1/...html#id2794761

  11. #11
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    un bout de script dans ce goût là :

    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
    <?php
    	$heure1 = '08:21';
    	$heure2 = '22:42';
     
    	$explosion1 = explode(':', $heure1);
    	$explosion2 = explode(':', $heure2);
     
    	$nbr_minutes1 = ($explosion1[0]*60) + $explosion1[1];
    	$nbr_minutes2 = ($explosion2[0]*60) + $explosion2[1];
     
    	$diff_temps = $nbr_minutes2 - $nbr_minutes1;
     
     
    	$nbre_heures = floor($diff_temps / 60);
    	$nbre_minutes = $diff_temps - ($nbre_heures * 60);
     
    	echo "différence de temps : $nbre_heures:$nbre_minutes";
     
     
     
    ?>


    Je sais, ce serait plus propre en passant par les timestamp, ça arrive...
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  12. #12
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    et hop, la version timestamp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	$heure1 = '08:21';
    	$heure2 = '22:42';
     
    	$time_stamp1 = strtotime('12/02/1970 '.$heure1);
    	$time_stamp2 = strtotime('12/02/1970 '.$heure2);
     
    	$diff = $time_stamp2 - $time_stamp1;
     
    	$heures = floor($diff / 3600);
    	$minutes = (($diff - ($heures * 3600)) / 60);
    	echo $heures.':'.$minutes;
    à noter que la date est parfaitement bidon et qu'on s'en moque royalement
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  13. #13
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Points : 50
    Points
    50
    Par défaut
    Merci beaucoup titoumimi!

    Ca marche parfaitement!

    MErci a tous pour votre aide!

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

Discussions similaires

  1. calcul différence entre deux heures dans une requete
    Par cornet04 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 18/03/2015, 16h37
  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. [Dates] Différence entre deux heures
    Par covin85 dans le forum Langage
    Réponses: 2
    Dernier message: 26/09/2008, 19h47
  4. [Time] comment calculer une différence entre deux Time?
    Par adil_vpb dans le forum API standards et tierces
    Réponses: 12
    Dernier message: 13/03/2007, 17h02
  5. Réponses: 7
    Dernier message: 05/07/2006, 16h29

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