Die 2e parameter is geen tijdsduur, maar de tijd tov 1 januari 1970 UTC (in seconden). Als je date('Y-m-d H:i:s',56) doet zul je dat zien. Het feit dat je d'r een uur bij krijgt komt omdat jouw server qua tijdzone een uur voor loopt op UTC (voorheen GMT = Engeland), en date() daarvoor dus corrigeert.
Netter is het om dan met een DateInterval te werken:
$then = clone ($now = new \DateTime());
$then->add(new \DateInterval('PT56M'));
print($then->diff($now)->format('%H:%I:%S'));
Gaat ook goed als het interval meer dan 24 uur beslaat (moet je wel %d in je format opgeven).
Let op: dit (en de date() oplossing ook) gaat mis als je uiteindelijk over een maand heen gaat. De ene maand is namelijk de andere niet ... Als je echt alleen maar uren, minuten, en seconden wilt kun je het ook eenvoudig zelf uitrekenen.
Oftewel, date() is een functie voor het formatteren van een datum/tijd in een specifieke tijdszone. Hierbij wordt UTC altijd als uitgangspunt genomen. Als default, wanneer je date() zonder argumenten aanroept, krijg je ook de UNIX-timestamp terug, net zoals time(). Maar hier bovenop wordt dus automagisch de tijdszone verwerkt.
Een formatteringsfunctie is niet echt ideaal om mee te rekenen. Als je echt met datums en/of tijden wilt rekenen kun je beter mktime() gebruiken of de hierboven genoemde Date klasses.
Ook kan het helpen om te doorgronden hoe deze functies omgaan met tijdszones.
Daarnaast is het een goede gewoonte om altijd UTC als basis te gebruiken wanneer je datums en tijden opslaat in een database, vooral als je met kolomtypes werkt die je niet vertellen uit welke tijdszone je opereert.
Bedankt.
In mijn functiefile zet ik altijd tijdzone voor België omdat alles vandaar gebeurd. voor dit ene script heb ik dus nu een overschrijving naar UTC. Het is toch maar enkel om 1 tijdsduur aan te geven, (hoe lang loopt mijn script). Momenteel zelfs maar ongeveer 1 minuut. Dus geen probleem meer.
Toch nog even voor de beeldvorming, aan de (UNIX-)timestamps zelf verandert niets, deze zijn altijd in UTC.
Als je een andere tijdszone instelt wordt het verschil in tijd tussen UTC en de ingestelde tijdszone automatisch berekend. Maar nogmaals: de timestamp zelf verandert niet, zoals het volgende stukje code demonstreert: