Bonjour,
ptit problème lors de l'addition de 3 horaires

voici ma commande mysql :

$somme = $this->Recap->query("SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(conduite))) AS conduite, SEC_TO_TIME(SUM(TIME_TO_SEC(attente))) AS attente, SEC_TO_TIME(SUM(TIME_TO_SEC(duree))) AS duree, (SEC_TO_TIME(TIME_TO_SEC(conduite)) + SEC_TO_TIME(TIME_TO_SEC(attente)) + SEC_TO_TIME(TIME_TO_SEC(duree))) AS total FROM recaps WHERE id = '$id' AND jour = '$jour'");
            debug($somme);
            die();

voici mon debug

/app/Controller/TrajetsController.php (line 66)
array(
    (int) 0 => array(
        (int) 0 => array(
            'conduite' => '02:55:03',
            'attente' => '00:28:03',
            'duree' => '25:10:51',
            'total' => '89079.000000'
        )
    )
)

les tps de conduite, attente et duree sont corrects, mais pas le total.
mon total n'ai jamais au format HH:mm:ss.

1 réponse


alexyon
Auteur
Réponse acceptée

bon voila ce que j'ai trouvé, mais ce n'est pas optimal je pense.
si qq1 a une solution pour améliorer, je serai preneur

$sommeconduite = $this->Trajet->query("SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(conduite))) as conduite FROM trajets WHERE name = '$id' AND jour = '$jour' AND supprconduite = 1 ");
        $sommeattente = $this->Trajet->query("SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(attente))) as attente FROM trajets WHERE name = '$id' AND jour = '$jour' AND supprattente = 1 ");
        $sommeduree = $this->Trajet->query("SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(duree))) as duree FROM trajets WHERE name = '$id' AND jour = '$jour' AND supprduree = 1 ");

        $sommeattente1 = $sommeattente'0']'0']'attente'];
        $sommeconduite1 = $sommeconduite'0']'0']'conduite'];
        $sommeduree1 = $sommeduree'0']'0']'duree'];
        $times = array($sommeconduite1, $sommeduree1, $sommeattente1);
        $seconds = 0;
        foreach ($times as $time)
          {
            list($hour,$minute,$second) = explode(':', $time);
            $seconds += $hour*3600;
            $seconds += $minute*60;
            $seconds += $second;
          }
          $hours = floor($seconds/3600);
          $seconds -= $hours*3600;
          $minutes = floor($seconds/60);
          $seconds -= $minutes*60;
          // return "{$hours}:{$minutes}:{$seconds}";
          $somme = sprintf('%02d:%02d:%02d', $hours, $minutes, $seconds);