afronden tijdverschil op hele kwartieren naar boven
Ik moet het tijdverschil omzetten naar een decimale waarde in uren. De uren worden opgeslagen met 2 decimalen en moeten op een kwartier naar boven afgerond worden.
M.a.w. van
12:00 tot 13:14 wordt 1,25 uur
12:00 tot 13:15 wordt 1,25 uur
12:00 tot 13:16 wordt 1,50 uur
12:00 tot 13:30 wordt 1.50 uur
Ik heb al een stukje om verschillen uit te rekenen, maar zit nu met de afronding
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$nextDay=$begintijd>$eindtijd?1:0;
$dep=EXPLODE(':',$begintijd);
$arr=EXPLODE(':',$eindtijd);
$diff=ABS(MKTIME($dep[0],$dep[1],0,DATE('n'),DATE('j'),DATE('y'))-MKTIME($arr[0],$arr[1],0,DATE('n'),DATE('j')+$nextDay,DATE('y')));
$hours=FLOOR($diff/(60*60));
$mins=FLOOR(($diff-($hours*60*60))/(60));
IF(STRLEN($hours)<2){$hours="0".$hours;}
IF(STRLEN($mins)<2){$mins="0".$mins;}
?>
$nextDay=$begintijd>$eindtijd?1:0;
$dep=EXPLODE(':',$begintijd);
$arr=EXPLODE(':',$eindtijd);
$diff=ABS(MKTIME($dep[0],$dep[1],0,DATE('n'),DATE('j'),DATE('y'))-MKTIME($arr[0],$arr[1],0,DATE('n'),DATE('j')+$nextDay,DATE('y')));
$hours=FLOOR($diff/(60*60));
$mins=FLOOR(($diff-($hours*60*60))/(60));
IF(STRLEN($hours)<2){$hours="0".$hours;}
IF(STRLEN($mins)<2){$mins="0".$mins;}
?>
Wie heeft er een goede tip?
Groeten, Gerrit
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$begin = '12:00';
$eind = '13:14';
$exbegin = explode(':', $begin);
$exeind = explode(':', $eind);
$verschil = ($exeind[0] - $exbegin[0]) * 60 + ($exeind[1] - $exbegin[1]);
echo number_format((ceil($verschil / 15) / 4), 2);
?>
$begin = '12:00';
$eind = '13:14';
$exbegin = explode(':', $begin);
$exeind = explode(':', $eind);
$verschil = ($exeind[0] - $exbegin[0]) * 60 + ($exeind[1] - $exbegin[1]);
echo number_format((ceil($verschil / 15) / 4), 2);
?>
Gewijzigd op 31/01/2012 17:09:24 door - SanThe -
Dit gaat bijna helemaal goed. Het enige probleem is dat de eindtijd over de datumgrens heen kan gaan. Bijvoorbeeld vana 23:00 tot 00:30 zou anderhalf uur moeten zijn, terwijl ik nu uitkom op -22.50. De voorbeeldcode die ik gaf doet daar wel wat mee, maar gaat heeft geen afronding.
Groeten, Gerrit
Dit kun je oplossen door te controleren of de uitkomst kleiner dan 0 is en zo ja dit van 24 af te halen.
Gewijzigd op 31/01/2012 20:31:27 door Gerben G
Nu is het helemaal super, in mijn praktijk is het nl. niet mogelijk dat iets langer dan 24 uur kan duren, dus zo gaat het helemaal goed.
Groeten, Gerrit