Door
Ray Mond
op 18-08-2020 19:31
gewijzigd op 18-08-2020 19:35
2.153 views
Beste mensen,
We hebben een script (overgenomen) nu worden de aantal uren (werkzaamheden) ingevoerd in de database als starttijd bijvoorbeeld 01:15 tot 01:30, dit is prima opgenomen in de database maar op moment dat ik de uren dus opvraag staat het echter afgerond als 0 uur, pas op het moment dat ik van 01:00 tot 02:00 als voorbeeld zal doen dan zal het weergegeven worden als 1 uur.
Mja, nu rondt je alles af op uren, dan is het nogal wiedes dat het niet werkt.
Ook weet ik niet of je op deze manier kunt rekenen met tijden, je doet nu net of dit getallen zijn:
$totaal = $eindTijd - $startTijd;
Maar die vlieger gaat (sowieso) niet op en kan hele onvoorspelbare resultaten geven, want "H:i" (het formaat van $eindTijd en $startTijd) is in wezen een string dus als je daar vervolgens vrolijk mee gaat rekenen alsof het getallen zijn wordt dit mogelijk allemaal getypecast en belandt misschien wel de helft van zo'n tijd in de prullenbak, wellicht met totaal onverklaarbare resultaten als gevolg.
Hij laat het inderdaad tot zover ik weet en kan zien ook alleen maar zien als een getal, dit is voor mij ook voldoende, als output hoef ik alles maar (opgeteld) te zien dus dat werktijd 01:00 - 02:00 vandaag bijvoorbeeld 1 uur was en morgen 15:00 - 17:00 2 uren is.. dit hoeft niet opgeslagen te worden want hij haalt die tijd al uit de database, echter laat hij de output alleen maar zien als volle uren.
01:15 - 01:30 = 0 uur
01:00 - 02:00 = 1 uur
wat ik juist zoek is dat de uitkomst 1:15 gaat zijn.
Ik weet verder niet in welke setting je dit alles gebruikt, maar er zijn allerlei randgevallen waar je mogelijk rekening mee moet houden zoals overgangen rond middernacht of mogelijk over meerdere dagen, afhankelijk van hoe je dingen formatteert kunnen berekeningen mogelijk misgaan.
Het onderstaande illustreert het gebruik redelijk, de rest is aan jou, ik neem aan dat voor je werk is?
<?php
$dates = array(
array('2020-08-17 23:45', '2020-08-18 01:30'), // different days
array('01:00', '02:00'), // same day
// etc
);
$myFormat = 'H:i';
$total = array('hours' => 0, 'minutes' => 0);
foreach ($dates as $date) {
// assumption: all times are recorded in the same timezone...
// assumption: all times occur on the same day... otherwise consider adding a DATE to the TIMEs...
$start = new DateTime($date[0]);
$end = new DateTime($date[1]);
$diff = $end->diff($start); // this returns a DateInterval object
$diffHours = ($diff->days * 24) + $diff->h; // track total hours, note $diff->h does not go beyond 24
$total['hours'] += $diffHours;
$diffMinutes = $diff->i;
$total['minutes'] += $diffMinutes;
?>start <?php echo $start->format($myFormat); ?> end <?php echo $end->format($myFormat); ?> difference <?php echo $diffHours.':'.$diffMinutes; ?><br><?php
}
?>total: <?php echo $total['hours'].':'.$total['minutes']; ?>[end]
Het is inderdaad voor werkuren en ook bovenstaande zal voor mij niet echt helpen vrees ik aangezien je dan de dagen in arrays zet en alles, bij mij haalt hij het echt uit de database en zal dat gewoon puur opgeteld moeten worden maar hoe... :)
Nja heel eerlijk gezegd had ik niet gedacht dat het nog zo lastig zou zijn haha.. Ik dacht het script telt wel de hele uren maar waarom kan hij dan geen kwartier en dergelijke optellen...
Ik had het geprobeerd met wat van bovenstaande code(s) maar dat mocht niet helpen voor wat ik graag zou willen :)