Ik ben nu al verschillende malen op het volgende probleem gestoten:
ik gebruik de mysql-functie NOW() om een bijvoorbeeld het ogenblik te registreren waarop iemand iets postte in mn forum. Als ik dat dan via een query oproep en daar bijvoorbeeld 5 minuten bij tel om ervoor te zorgen dat men niet kan posten, zie ik problemen. Als ik dan een tijdsweergave gebruik die ook de uren weergeeft, blijkt er een uur en 5 minuten te staan. Komt dit doordat NOW() en time() op een verschillende manier werken (het eene met GMT- en het andere met lokale tijd)?

Ik heb al wat gezocht op php.net, en heb daar functies als setlocale() en strftime() gezien. Moet ik dit soort functies gebruiken om een juiste tijdsweergave te krijgen, en mag ik dus niet gewoon time() gebruiken? En kan ik zo ook door een vaste tijdszone te gebruiken dit probleem oplossen, en mogelijke andere (bijvoorbeeld als een Amerikaanse gebruiker hetzelfde systeem gebruikt kan dit ook voor problemen zorgen)?
Maak een keuze: De database bepaalt de tijd of de webserver (waar PHP op draait) bepaalt de tijd. Ga dit nooit en te nimmer mixen, dat kan altijd onverwachte resultaten opleveren.

Vraag: Welke tijdzone hanteert de database? (aangenomen dat je de database gaat gebruiken als bepalende factor)
Ik ben op dit moment nog op mn localhost bezig. Dus ik weet niet juist of er dan een verschil is tussen de beide.
Dat ligt aan de instellingen van de webserver (Apache) en de databaseserver (MySQL?). Zoek deze instellingen op en je hebt duidelijkheid.

Maar hoe dan ook, gebruik slechts 1 van beide. Mocht je dan ooit problemen hebben, dan weet je waar het probleem zich bevind.
Ok, dan denk ik dat ik het best met de instellingen van mijn MySQL-database werk.
Maar als ik dan bijvoorbeeld dit soort berekeningen wil uitvoeren, hoe moet ik dat dan doen?
$posttijd+300 - time()

Met wat kan ik de time()-functie vervangen zodat ik de tijd van de database gebruik?
Zie hoofdstuk 12.6 van de MySQL-handleiding, daar staan een hele serie handige datum- en tijdfuncties beschreven.

De keuze voor de database houdt dus ook in dat je niet meer in PHP gaat lopen klooien met datums en tijden.

Reageren