2011-11-30 3 views
2

si j'ai 2 variables de temps:opérations mathématiques sur les variables de temps

a = 00:00:12 and b = 00:00:05 

comment pourrais-je les ajouter ensemble pour faire:

c = 00:00:17 ? 

alors je besoin de les diviser pour cageot en moyenne, mais je suis coincé sur la partie ajoutée.

i obtenir les données de la base de données dans ce format et lorsque je tente un simple:

c=a+b; 

i get:

00 

comment je Ænglisc des opérations mathématiques simples sur une variable de temps?

Répondre

2

Ou vous allez tout droit simplement en avant ;-)

<?php 
$a = "00:00:12"; 
$b = "00:00:05"; 

function addTime($timeA, $timeB) { 
    $timeAcomponents = explode(":", $timeA); 
    $timeBcomponents = explode(":", $timeB); 

    $timeAinSeconds = $timeAcomponents[0]*60*60 + $timeAcomponents[1]*60 + $timeAcomponents[2]; 
    $timeBinSeconds = $timeBcomponents[0]*60*60 + $timeBcomponents[1]*60 + $timeBcomponents[2]; 

    $timeABinSeconds = $timeAinSeconds + $timeBinSeconds; 

    $timeABsec = $timeABinSeconds % 60; 
    $timeABmin = (($timeABinSeconds - $timeABsec)/60) % 60; 
    $timeABh = ($timeABinSeconds - $timeABsec - $timeABmin*60)/60/60; 

    return str_pad((int) $timeABh,2,"0",STR_PAD_LEFT).":" 
      .str_pad((int) $timeABmin,2,"0",STR_PAD_LEFT).":" 
      .str_pad((int) $timeABsec,2,"0",STR_PAD_LEFT); 
} 

echo "Adding time variables:\n"; 
echo "$a + $b = ".addTime($a, $b); 
?> 
+0

merci beaucoup –

+0

Vous êtes les bienvenus, mais s'il vous plaît considérez que ce n'est pas un bon style de programmation du tout ;-) C'est le moyen simple, ce qui n'est pas recommandé. Les réponses de N.B., Devart ou Ondrejs sont plus élégantes. – tamasgal

3

Il suffit d'utiliser mktime pour toutes les opérations, puis reconvertir en format lisible (en utilisant date) lorsque vous les dates de sortie:

$a = mktime(0, 0, 12); 
$b = mktime(0, 0, 5); 

echo date('G:i:s', $a + $b); 
echo date('G:i:s', ($a + $b)/2); 
2

MySQL vous pouvez le faire de cette façon -

SET @a = '00:00:12'; 
SET @b = '00:00:05'; 

SET @a_sec = TIME_TO_SEC(@a); 
SET @b_sec = TIME_TO_SEC(@b); 

SET @c_sec = @a_sec + @b_sec; 

SELECT SEC_TO_TIME(@c_sec); 
+---------------------+ 
| SEC_TO_TIME(@c_sec) | 
+---------------------+ 
| 00:00:17   | 
+---------------------+ 
6
$date['first'] = DateTime::createFromFormat('H:i:s', "00:00:12"); 
$date['second'] = DateTime::createFromFormat('H:i:s', "00:00:05"); 

$interval = new DateInterval('PT'. $date['second']->format('s') .'S'); 

$date['first']->add($interval); 

echo $date['first']->format('s'); // echoes 17 
Questions connexes