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] Addition de plusieurs heures dont le nombre est indéfini


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de oceane751
    Profil pro
    Intégrateur Web
    Inscrit en
    Novembre 2004
    Messages
    1 280
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 280
    Points : 575
    Points
    575
    Par défaut [Dates] Addition de plusieurs heures dont le nombre est indéfini
    bonjour à tous

    dans une de mes tables j'ai un champs "temps_jour" de type time, temps de travail par jour
    pour une semaine et par personne, j'ai 5 "temps_jour" mais je peux en avoir que 1 ou 2 ou 3 ou 4 ou 5

    j'aimerai pouvoir additionner ces temps dont le nombre n'est pas fixe
    j'ai le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $sql = SELECT temps_jour FROM presence WHERE num_semaine = '1' AND id_stag = '3'
    $quer = mysql_query($sql);
    while ($fe = mysql_fetch_array($quer))
    {
    echo $fe['temps_jour'];
    }
    ça me renvoit donc tous les "temps_jour" correspondant à une semaine et un stagiaire

    à partir de ces résultats, j'aimerai pouvoir les additionner

    j'ai un code permettant d'additionner 2 heures, mais comment faire pour additionner plusieurs heures dont le nombre n'est pas défini?


    merci beaucoup..

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $total_heures = 0
    while ($fe = mysql_fetch_array($quer))
    {
       // ta fonction d'addition. Tu ajoutes $fe['temps_jour'] à $total_heures
    }
    echo $total_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 éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    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
     
    $sql = "SELECT temps_jour FROM presence WHERE num_semaine = '1' AND id_stag = '3'";
    $quer = mysql_query($sql);
    $total_heure = 0;
    $total_min = 0;
    while ($fe = mysql_fetch_array($quer))
    {
        $fe_split = split("[-: ]", $fe);
        $total_heure += intval($fe[3]);
        if(intval($fe[4]) + $total_min >= 60)
        {
            $total_heure ++;
            $total_min = intval($fe[4]) + $total_min - 60;
        }
        else
        {
            $total_min += intval($fe[4]);
        }
    }
    Je ne suis pas sur d'avoir saisi ton problème mais quelque chose du genre conviendrait peut etre ?
    Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

    Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"

  4. #4
    Membre confirmé Avatar de oceane751
    Profil pro
    Intégrateur Web
    Inscrit en
    Novembre 2004
    Messages
    1 280
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 280
    Points : 575
    Points
    575
    Par défaut
    arf ça ne marche pas..

    j'ai trouvé ce bout de code que 'jai adapté :
    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
     
    $sql = "SELECT temps_jour FROM presence WHERE id_sem = '1' AND id_stagiaire = '2'";
    echo $sql;
    $quer = mysql_query($sql);
    $total_heure = 0;
    $total_min = 0;
    while ($fe = mysql_fetch_array($quer))
    {
    $h = $fe[0];
    echo "<br>".$h."TIME<br><br>";
    function AddTime($total_heure,$h) {
     
                list( $hr1, $min1, $sec1 ) = explode( ":", $h);
                echo $hr1."heure<br>";
                echo $min1."minute<br>";
                echo $sec1."seconde<br>";
     
                $UTime1 = mktime($hr1,$min1,$sec1,01,01,1970);
                echo $UTime1."mktime<br>";
     
                $UTimeTotal = $UTime1 + $total_heure;
                $UTimeTotal = $UTimeTotal - 3600;
                $UTimeTotal = abs($UTimeTotal);
                echo $UTimeTotal."<br>";
                $timeTotal = date ("H:i:s",$UTimeTotal); 
                list( $hr3, $min3, $sec3 ) = split( ":", $timeTotal); 
                $hrTotal = $hr1 + $total_heure;
                if ($hr3 >= 1) 
                    $hrTotal = $hrTotal + $hr3; 
                $timeTotal = $hrTotal.":".$min3.":".$sec3; 
                return $timeTotal; 
            } 
     
    //Utilisation 
    echo AddTime($total_heure,$h);
     
     
    }

    avant la fonction il me donne bien les heures correspondantes à la requete
    mais apres quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo $hr1."heure<br>";
    echo $min1."minute<br>";
    echo $sec1."seconde<br>";
    pour vérifier que tout ce passe bien, mais ça me renvoie qu'une seule heure et pas les autres... comme si la boucle n'a servit à rien..

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 37
    Points : 30
    Points
    30
    Par défaut
    Peux-tu nous donner ce qui est affiché lors de l'exécution STP ? :o

  6. #6
    Membre confirmé Avatar de oceane751
    Profil pro
    Intégrateur Web
    Inscrit en
    Novembre 2004
    Messages
    1 280
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 280
    Points : 575
    Points
    575
    Par défaut
    désolée d'avoir été longue à répondre..

    alors voici ce que ça me dit :
    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
     
    SELECT temps_jour FROM presence WHERE id_sem = '1' AND id_stagiaire = '2'
    00:02:00TIME
     
    00heure
    02minute
    00seconde
     
    Warning: mktime(): Windows does not support negative values for this function in c:\program files\easyphp1-7\www\yyyy\xxx\calcul_temps_total.php on line 29
    -1mktime
    3601
    2:00:01
    00:53:00TIME
     
     
    Fatal error: Cannot redeclare addtime() (previously declared in c:\program files\easyphp1-7\www\oceanecoin\pointeuse\calcul_temps_total.php:22) in c:\program files\easyphp1-7\www\yyyy\xxx\calcul_temps_total.php on line 22
    la ligne 22 est celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function AddTime($total_heure,$h)
    et la ligne 29 est celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $UTime1 = mktime($hr1,$min1,$sec1,01,01,1970);

  7. #7
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    déjà la fonction "addTime" doit être déclarée en dehors de la boucle sinon elle sera récrée à chaque passage dans la boucle d'où l'erreur qui indique que la fonction existe déjà

    ensuite tu n'as pas besoin de créer une fonction si elle est appelée une seule fois
    essaye ç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
    <?php
     
    $sql = "SELECT temps_jour FROM presence WHERE id_sem = '1' AND id_stagiaire = '2'";
    echo $sql;
    $quer = mysql_query($sql);
     
    $total_secondes = 0;
     
    while ($fe = mysql_fetch_array($quer))
    {
        $h = $fe[0];
        echo "<br>".$h." TIME<br><br>";
     
        list( $hr1, $min1, $sec1 ) = explode( ":", $h);
     
        $total_secondes += $sec1 + $min1 * 60 + $hr1 * 3600;
    }
     
    echo "Résulat : $total_secondes secondes<br/>";
     
    // décomposation en heures:minutes:secondes
     
    $heures = $total_secondes / 3660;
    $reste = $total_secondes % 3660;
    $minutes = $reste / 60;
    $reste = $reste % 60;
    $secondes = $reste / 60;
     
    echo "Résulat : $heures:$minutes:$secondes<br/>";

  8. #8
    Membre confirmé Avatar de oceane751
    Profil pro
    Intégrateur Web
    Inscrit en
    Novembre 2004
    Messages
    1 280
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 280
    Points : 575
    Points
    575
    Par défaut
    ok ça marche

    j'ai rajouté la fonction floor.

    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
     
    $sql = "SELECT temps_jour FROM presence WHERE id_sem = '1' AND id_stagiaire = '2'";
    echo $sql;
    $quer = mysql_query($sql);
     
    $total_secondes = 0;
     
    while ($fe = mysql_fetch_array($quer))
    {
        $h = $fe[0];
        echo "<br>".$h." TIME<br><br>";
     
        list( $hr1, $min1, $sec1 ) = explode( ":", $h);
     
        $total_secondes += $sec1 + $min1 * 60 + $hr1 * 3600;
    }
     
    echo "Résulat : $total_secondes secondes<br/>";
     
    // décomposation en heures:minutes:secondes
     
    $heures = floor($total_secondes / 3660);
    $reste = $total_secondes % 3660;
    $minutes = floor($reste / 60);
    $reste = $reste % 60;
    $secondes = floor($reste / 60);
     
    echo "Résulat : $heures:$minutes:$secondes<br/>";
    merci ebaucoup en tout cas!!

  9. #9
    Membre confirmé Avatar de oceane751
    Profil pro
    Intégrateur Web
    Inscrit en
    Novembre 2004
    Messages
    1 280
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 280
    Points : 575
    Points
    575
    Par défaut
    une question
    le % il sert à quoi déjà?

  10. #10
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    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
    <?php
     
    function sum_time($time)
    {
    	static $sum_time = 0;
     
    	list($hour, $minute, $second) = explode(':', $time);
     
    	printf('<br />%d heures<br />%d minutes<br />%d secondes<br />', $hour, $minute, $second);
     
    	$sum_time += ($second + $minute*60 + $hour*3600);
     
    	$sum_time_hour = floor($sum_time/3600);
    	$sum_time_minute = floor(($sum_time - $sum_time_hour*3600)/60);
    	$sum_time_second = ($sum_time - $sum_time_hour*3600 - $sum_time_minute*60);
     
    	return sprintf('%d:%d:%d', $sum_time_hour, $sum_time_minute, $sum_time_second);
    }
     
    $sql = 'SELECT temps_jour FROM presence WHERE id_sem = \'1\' AND id_stagiaire = \'2\'';
    echo($sql);
     
    $result = mysql_query($sql);
     
    while ($row = mysql_fetch_assoc($result))
    {
    	echo('<br />',$row['temps_jour'],' TIME<br /><br />');
     
    	$total = sum_time($row['temps_jour']);
    }
     
    echo('<br />',$total,' TOTAL TIME<br /><br />');
     
    // Pour récuperer les nombres d'heures, minutes, secondes :
    // list($total_hours, $total_minutes, $total_seconds) = explode(':', $total);
    // printf('<br />%d heures<br />%d minutes<br />%d secondes<br />', $total_$hours, $total_$minutes, $total_seconds);
     
    ?>

  11. #11
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par oceane751
    une question
    le % il sert à quoi déjà?
    c'est la fonction "modulo"
    http://php.net/language.operators.arithmetic

    tu es sur d'avoir besoin de rajouter "floor" ? normalement c'est une division entière donc tu n'en a pas besoin

  12. #12
    Membre confirmé Avatar de oceane751
    Profil pro
    Intégrateur Web
    Inscrit en
    Novembre 2004
    Messages
    1 280
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 280
    Points : 575
    Points
    575
    Par défaut
    si je ne met pas floor j'ai : 0,907676666

  13. #13
    Membre confirmé Avatar de oceane751
    Profil pro
    Intégrateur Web
    Inscrit en
    Novembre 2004
    Messages
    1 280
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 280
    Points : 575
    Points
    575
    Par défaut
    et c'est pas 3660, c'est 3600

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/09/2014, 20h39
  2. Awk : sommer plusieurs lignes, dont le nombre est variable
    Par gangsoleil dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 30/01/2012, 17h40
  3. Réponses: 9
    Dernier message: 03/11/2009, 16h39
  4. Générer des boucles dont le nombre est dynamique
    Par senacle dans le forum Général Python
    Réponses: 4
    Dernier message: 13/12/2007, 14h34
  5. Réponses: 29
    Dernier message: 29/03/2007, 11h50

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