Hoe zou je een functie kunnen maken die op een website aangeeft hoeveel uur en minuten er nog te gaan zijn alvorens het 18:00 uur is. Ik wil dit schrijven zodat ik kan aangeven wanneer de courier mijn klant zijn pakketje komt ophalen. Die komt namelijk elke dag om 18:00 uur.
Hoi Mr Ark, ik wil het server-side doen, dan weet ik i.i.g. zeker dat de tijd altijd klopt. Vandaar dat ik een php oplossing zoek en niet een javascript en/of Ajax script..
of zo-iets:
<?php
$verschil = nog_te_gaan('18:00:00');
echo $verschil;
function nog_te_gaan($tijd, $m_nu=null)
{
$m_nu = (empty($m_nu)?makeDatetimeObject('now'):$m_nu);
list($H, $i, $s) = explode(':', $tijd);
if ($m_nu->format('H') >= $H) // indien je iets anders gebruikt dan "18:00:00", ook met minuten en/of seconden die niet 0 zijn, zou je daar ook op moeten controleren
{
$bestemming = mktime($H, $i, $s, $m_nu->format('m'), $m_nu->format('d')+1, $m_nu->format('Y'));
}
else
{
$bestemming = mktime($H, $i, $s, $m_nu->format('m'), $m_nu->format('d'), $m_nu->format('Y'));
}
$verschil = $bestemming - strtotime($m_nu->format('Y-m-d H:i:s'));
$s = $verschil % 60;
$i = ( ($verschil-$s) / 60 ) % 60 ;
$H = ( ($verschil-$s-60*$i) / 3600 );
return sprintf('%02d:%02d:%02d', $H, $i, $s); // eventueel return je het onder een ander formaat
}
function makeDatetimeObject($datum_string)
{
try
{
return new DateTime($datum_string, new DateTimeZone('Europe/Berlin'));
}
catch (Exception $e)
{
return new DateTime("now", new DateTimeZone('Europe/Berlin'));
}
}
?>
(kan waarschijnlijk efficiƫnter, maar het werkt, volgens mij)
Edit: functienaam aangepast, die van SanThe klonk beter dan de mijne