Tja, jag håller på med ett incheckningssystem till frugans jobb(taxi), webbdesign är min starka sida, PHP är det inte lika mycket
Jag har fått min kod att fungera men det känns som om det måste finnas ett enklare sätt.
Koden som visas nedan fungerar bara om hon har jobbat dagtid(06-19). Denna koden gör egentligen det som den ska, men ville visa även denna så ni får ett grepp om vad jag försöker göra.
$start och $slut innehåller en tidsstämpel var som är utformad på detta sättet: 2018-08-03 06:31:52, det är sedan dessa tider som jag räknar ut skillnaden mellan.
Okej så långt så fungerar det kanon, men sen kom jag till nästa stycke som behövde göras. Nämligen om hon börjar innan kl 19 och slutar efter kl 19, Vid 19:00 så går hon över på kvällstid, vilket gör att jag måste kunna skilja dessa tider åt för varje pass.
Då har jag tagit fram denna geniala koden:
Även denna koden gör väl vad den ska men den känns väldigt rörig och komplicerad. Den räknar helt enkelt ut tiden som är mellan då hon startade passet och 19:00, sedan räknar den ut tiden som är ifrån 19:00 fram tills det att hon går av passet.
Hade detta varit allt som behövts så hade jag väl nöjt mig där antar jag, men dessvärre är det inte så. Lördag och Söndag går under helgtid(finns ingen dag/kvällstid här), det har jag också lyckats lösa fast med mycket mindre kod.
Men säg nu att åker på att köra från Fredag kl18 fram tills Lördag kl03. Då är det helt plötsligt 3 olika "OB" att räkna på, det är för en timma dag på fredagen fram tills 19, sedan är det kvällstid fram till kl24, sedan är det helg fram till kl03.
Med mitt sätt att koda så känns det som om detta kommer bli helt överdrivet svårt att ordna.
Så jag tänkte om det helt enkelt finns något magiskt sätt att göra allt detta i en funktion istället. Om någon har den minsta ide så tveka inte att peka mig åt rätt håll för detta driver mig till vansinne haha
Jag har fått min kod att fungera men det känns som om det måste finnas ett enklare sätt.
Koden som visas nedan fungerar bara om hon har jobbat dagtid(06-19). Denna koden gör egentligen det som den ska, men ville visa även denna så ni får ett grepp om vad jag försöker göra.
$start och $slut innehåller en tidsstämpel var som är utformad på detta sättet: 2018-08-03 06:31:52, det är sedan dessa tider som jag räknar ut skillnaden mellan.
Kod:
//Räkna dagtid, vardag. KLART
if($starthour > 5 && $stophour < 19 && $start < $slut)
{
$start_date2 = new DateTime($start);
$since_start2 = $start_date2->diff(new DateTime($slut));
$minutes2 = $since_start2->days * 24 * 60;
$minutes2 += $since_start2->h * 60;
$minutes2 += $since_start2->i; //Passets längd i minuter
$hours2 = $minutes2 / 60; //Passets längd i timmar
$hours2 = floor($hours2); //Avrunta timmar till heltal
$minutesdone2 = $hours2 * 60; //Räkna ut hur många minuter som går åt till alla hela timmar
$minutesleft2 = $minutes2 - $minutesdone2; //Räkna ut hur många minuter som är kvar efter hela timmar tagits bort
echo "<center><div class='timebox'><table width='100%'><tr><td width='16%'>$start</td><td width='16%'>$slut</td><td width='16%'>$timmarperdag $minuterperdag</td><td width='16%'>$hours2 H, $minutesleft2 M</td><td width='16%'></td><td width='16%'></td></tr></table></div>";
$daytime = $daytime + $hours2; //Lägg till timmar i totalen för månaden
$daytimeminutes = $daytimeminutes + $minutesleft2; //Lägg till minuter i totalen för månaden
}
Okej så långt så fungerar det kanon, men sen kom jag till nästa stycke som behövde göras. Nämligen om hon börjar innan kl 19 och slutar efter kl 19, Vid 19:00 så går hon över på kvällstid, vilket gör att jag måste kunna skilja dessa tider åt för varje pass.
Då har jag tagit fram denna geniala koden:
Kod:
//Räkna dagtid och kvällstid, vardag. KLART
if($starthour > 5 && $stophour > 19 && $start < $slut)
{
$startday = mb_substr($start, 0, -9, 'utf-8');
$start_date2 = new DateTime($start);
$since_start2 = $start_date2->diff(new DateTime($slut));
$minutes2 = $since_start2->days * 24 * 60;
$minutes2 += $since_start2->h * 60;
$minutes2 += $since_start2->i;
$minutestotal = $minutes2;
$startday = mb_substr($start, 0, -9, 'utf-8');
$stopday = "$startday 19:00:00";
$start_date2 = new DateTime($start);
$since_start2 = $start_date2->diff(new DateTime($stopday));
$minutes2 = $since_start2->days * 24 * 60;
$minutes2 += $since_start2->h * 60;
$minutes2 += $since_start2->i;
$hours2 = $minutes2 / 60;
$hours2 = floor($hours2);
$minutesdone2 = $hours2 * 60;
$minutesleft2 = $minutes2 - $minutesdone2;
$minutesleftnight = $minutestotal - $minutesdone2;
if ($minutesleftnight > 0)
{
$hoursleftnight = $minutesleftnight / 60;
$hoursleftnight = floor($hoursleftnight);
$minutesdonenight = $hoursleftnight * 60;
$minutesleftnight = $minutesleftnight - $minutesdonenight;
$hourslefttotal = "$hoursleftnight H, $minutesleftnight M";
$nighttime = $hoursleftnight;
$nighttimeminutes = $minutesleftnight;
}
echo "<center><div class='timebox'><table width='100%'><tr><td width='16%'>$start</td><td width='16%'>$slut</td><td width='16%'>$timmarperdag $minuterperdag</td><td width='16%'>$hours2 H, $minutesleft2 M</td><td width='16%'>$hourslefttotal</td><td width='16%'></td></tr></table></div>";
$daytime = $daytime + $hours2;
$daytimeminutes = $daytimeminutes + $minutesleft2;
}
Även denna koden gör väl vad den ska men den känns väldigt rörig och komplicerad. Den räknar helt enkelt ut tiden som är mellan då hon startade passet och 19:00, sedan räknar den ut tiden som är ifrån 19:00 fram tills det att hon går av passet.
Hade detta varit allt som behövts så hade jag väl nöjt mig där antar jag, men dessvärre är det inte så. Lördag och Söndag går under helgtid(finns ingen dag/kvällstid här), det har jag också lyckats lösa fast med mycket mindre kod.
Men säg nu att åker på att köra från Fredag kl18 fram tills Lördag kl03. Då är det helt plötsligt 3 olika "OB" att räkna på, det är för en timma dag på fredagen fram tills 19, sedan är det kvällstid fram till kl24, sedan är det helg fram till kl03.
Med mitt sätt att koda så känns det som om detta kommer bli helt överdrivet svårt att ordna.
Så jag tänkte om det helt enkelt finns något magiskt sätt att göra allt detta i en funktion istället. Om någon har den minsta ide så tveka inte att peka mig åt rätt håll för detta driver mig till vansinne haha