afronden tijdverschil op hele kwartieren naar boven
Hoi,
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
Wie heeft er een goede tip?
Groeten, Gerrit
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 -
Hoi 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 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
@Gerrit
Dit kun je oplossen door te controleren of de uitkomst kleiner dan 0 is en zo ja dit van 24 af te halen.
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
Hoi Gerben,
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
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




