Ik ben bezig met het berekenen met het verschil van twee tijden in uren en minuten.

Voorbeeld code


$estimated_time = '40:30';
$completed_time = '20:45';

// list the times
list($hours1, $minutes1) = explode(':', $estimated_time);
list($hours2, $minutes2) = explode(':', $completed_time);

// mktime
$t1 = mktime($hours1, $minutes1); // estimated time
$t2 = mktime($hours2, $minutes2); // completed time

// Calc the difference in seconds
$seconds = $t1 - $t2;
// hours
$hours     =  floor($seconds / (60*60));
// minutes
$minutes   =  floor(($seconds / 60) % 60);

// result 19:45
echo $diff = $hours . ':' . $minutes;


De uitkomst 19:45 klopt. Dit is het verschil in uren positief.
Als ik de tijden aanpas naar


$estimated_time = '40:00';
$completed_time = '44:30';


dan is de uitkomt -5:-30 maar moet zijn -4:30 (4:30 extra uren).
Dit komt door floor, maar als ik dit weg zou halen werkt de positieve berekening niet meer.

Heeft iemand een oplossing.

Ik heb ook geprobeerd met DateTime() te werken maar deze kan niet overweg met uren groten dan 24.
Voorbeeld


/**
 * DATETIME EXAMPLE
 */

$one = new DateTime('40:00');
$two = new DateTime('12:00');

// difference
$diff = $one->diff($two);

// Werkt niet error!
Probeer eens de functie round() gebruiken in plaats van floor().

De abs() functie zou je altijd als een quickfix/workaround kunnen gebruiken voor de positieve getallen. Anders moet je de getallen misschien eens omdraaien.
Als ik round gebruikt wordt het positieve uitkomst 20:45. Dus dat werkt ook niet. Ik hoop dat iemand misschien weet hoe je met php DateTime functie tijden groter dan 24 uur bij elkaar kop optellen of aftrekken.
Lijkt me beetje Cito-toets nivo :

(((40*60)+30)-((20*60)+45))/60 = 19,75

60*,75 = 45
<?php
function calcDiff($timeHigh, $timeLow)
{
if($timeHigh < $timeLow) return '-'.calcDiff($timeLow, $timeHigh);
// list the times
list($hours1, $minutes1) = explode(':', $timeHigh);
list($hours2, $minutes2) = explode(':', $timeLow);

// mktime
$t1 = mktime($hours1, $minutes1); // estimated time
$t2 = mktime($hours2, $minutes2); // completed time

// Calc the difference in seconds
$seconds = $t1 - $t2;
// hours
$hours = floor($seconds / (60*60));
// minutes
$minutes = floor(($seconds / 60) % 60);
// return
return $hours . ':' . $minutes;
}

$estimated_time = '40:30';
$completed_time = '20:45';

// result 19:45
echo calcDiff($estimated_time, $completed_time).'<br/>';

$estimated_time = '40:00';
$completed_time = '44:30';
// result -4:30
echo calcDiff($estimated_time, $completed_time).'<br/>';
?>

Reageren