Probleme mit Datum wegen Sommerzeit, etc.

UnkiDunki

Grünschnabel
Hi,

ich habe ein Formular in dem man ein Datum angeben kann. Dieses wird dann in eine MySQL-Datenbank geschrieben. Das ganze wandel ich vorher in den entsprechenden Timestamp um:

PHP:
$date = date("Y-m-d H:i:s",mktime($hour,$minutes,$seconds,$month,$day,$year));

Für den 7.12.2009 0:00Uhr habe ich dann den Wert "2009-12-07 00:00:00" in meiner DB stehen. Korrekt also.
Das Problem ist jetzt, den Timestamp aus der DB zu holen (mache ich mit "UNIX_TIMESTAMP" und wieder entsprechend aufzuschlüsseln:

PHP:
$hour = date("H",$timestamp);

Hier bekomme ich für die Stunde den Wert "1", da es sich ja um ein Datum aus dem Dezember handelt. Für z.B. einen Juli würde ich korrekt den Wert "0" bekommen.
Meine Frage: Wie schlüssel ich das ganze wieder auf ohne mir über Sommer/Winterzeit Gedanken machen zu müssen.
Also praktisch immer den Wert, wie ich ihn in der Datenbank sehe auch so wieder zurückzubekommen?

Habe schon gegoogelt und gesehen, dass man mit
PHP:
date('I', $timestamp)
herausbekommen kann, ob es sich jetzt um Sommerzeit handelt oder nicht.
Bei dem Wert "0" wäre die Zeit also korrekt (z.B. im Juli), bei "1" hätte ich das Problem der "falschen" Stunde. Aber wie mache ich mir das jetzt genau zu Nutze oder gibt es ne Alternative zu date, wo ich mir um diese Geschichten keine Gedanken machen muss?

Vielen Dank im Voraus :)
 
Eine Frage vorweg, warum liest du eigentlich die Zeit so genau ein, mit Stunde Minute und Sekunde

Gut aber wenn du keine Sommerzeit haben möchtest, dann rechne doch zur Sommerzeit einfach von deinem Datenbankeintrag eine Stunde zurück

PHP:
if(date('I', $timestamp) == 1){
    $date -= 3600;
}
 
Hallo!

Ich verstehe auch nicht ganz was es soll.
Wenn ich heute einen Eintrag für den 31.12. um 0:00 Uhr mit dem Betreff "Feuerwerk" mache, dann ist der Termin im Dezember immernoch am 31.12. um 0:00 Uhr.
Es sei denn ich stelle meine Uhr nicht um. ;)

Gruss Dr Dau
 
Ich denke eher, die Datenbank liegt auf einem deutschen Server, auf dem vlt. amerikanische Kunden drauf zugreifen.
Das sich der Datenbankeintrag nicht ändert weiß er ja!
Aber wenn meine Theorie wirklich stimmt, gibt es dafür eine bessere Lösung und zwar beim Einlesen in die DB!
 
Erst mal vielen Dank für euer Feedback :)
Also...

Steusi hat gesagt.:
Eine Frage vorweg, warum liest du eigentlich die Zeit so genau ein, mit Stunde Minute und Sekunde

So genau brauche ich das garnicht. Jedenfalls nicht auf die Sekunde...
Prinzipiell handelt es sich nämlich um Termine. Muss also nur auf die Minute genau sein, wobei ich auch da im Formular nur zwischen den Werten {0,15,30,45} wählen lasse...
Wenn ich jetzt bei Sommerzeit einfach eine Stunde zurückrechne, dann habe ich nie mehr Probleme damit? Denn wie dir, Dr Dau, ging es mir auch...
Dr Dau hat gesagt.:
Wenn ich heute einen Eintrag für den 31.12. um 0:00 Uhr mit dem Betreff "Feuerwerk" mache, dann ist der Termin im Dezember immernoch am 31.12. um 0:00 Uhr.
So habe ich mir das nämlich auch gedacht. Ich möchte den "Zirkus" mit Sommerzeit garnicht :) Ich will einfach den Wert, wie er in der DB steht (denn dort ist es ja korrekt) entsprechend formatiert ausgegeben haben und mir nicht Gedanken drüber machen müssen, wo jetzt mein Server steht und von wo die Leute drauf zugreifen...

Steusi hat gesagt.:
Aber wenn meine Theorie wirklich stimmt, gibt es dafür eine bessere Lösung und zwar beim Einlesen in die DB!

Aber wenn beim Einlesen in die DB und der Wert in der DB doch korrekt sind...
Beim 31.12. - 0:00 Uhr habe ich dort dann auch wirklich 0:00 Uhr stehen...

@vfl_freak: Mmm... also gmdate() gucke ich mir gleich mal an und gucke, was ich damit für Ergebnisse erziele...

Fazit: Will garnicht wissen, wo ich noch überall diese Sommerzeitproblematik "unbeschwert" ignoriert habe :-)
 
Zurück