Kalender Programmieren

meisteralex

Lieutenant
Registriert
Juni 2003
Beiträge
552
Hi, bin grad dabei in PHP/MySQL einen Kalender zu programmieren und hab mal ne Frage zur vorgehensweise.

Ich mach Hier z.b. abragen, die lauten "such mir alles aus der db, zwischen 24.03 00:00 und 25.03 00:00". Soweit so gut, nur bekomm ich hier falsche ergebnisse, wenn ich z.b. einträge mit sommerzeit mache.

Gibts da irgendne Vorgehensweise, welche z.b. besagt, wie und ich welchem zeitvormat man die einträge speichern sollte (z.b. alle in sommerzeit) oder so ähnlich ?
 
Ähm nen Kalender noch nicht direkt, aber ich hatte mich schonmal mit der Problematik auseinandergesetzt und bin zu folgender Lösung gekommen:

Die Zeiten werden immer in einer fixen Zeitzone gespeichert (z.B: GMT = +0).

In einem weiteren Feld speicherst du den Time-Offset der bei der Speicherung gültig war (z.B. 2). Wozu man den genau braucht, weis ich nicht, jedoch ist es besser mehr Daten zu speichern als nötig ;)

Des weiteren brauchst du den Time-Offset des Benutzers. Wir hier leben z.B. in der Zeitzone Berlin welche GMT+1 ist.

Beispiel:
PHP:
$user_timezone = 1;

$datum_normalisiert = gmdate("Y-m-d H:i:s");
mysql_query("insert into kalender (datum) VALUES ('$datum_normalisiert')");

$rh = mysql_query("select datum from kalender where ...");
...
$datum_aus_db = mysql_fetch_field($rh,0,0);

echo "Das aktuelle Datum ist: ". date("d.m.Y H:i:s",strtotime("+ $user_timezone hours",strtotime($datum_aus_db)));

Edit:
Eventuell willst du noch geklärt haben warum man das Datum in einer fixen Zeitzone speichert:
Die Zeit in einer bestimmten Zeitzone läuft immer konstant vorwärts, also keine Spünge durch irgendwelche Zeitzonen. Die Sommer/Winterzeit wird am Rechner dadurch realisiert, dass die Zeitzone um eine Stunde verschoben wird. Die Winterzeit in Berlin ist GMT+1 und die Sommerzeit GMT+2. Also kannst du auch verlässlich Zeitdifferenzen mit der GMT Zeit ausrechnen.

Eventuell noch eine Hilfe, wie man die Zeitzone direkt in Datenbankabfragen integriert:
PHP:
mysql_query("SELECT DATE_ADD(datum, INTERVAL $user_timezone HOURS) FROM kalender");
 
Zuletzt bearbeitet:
Zurück
Oben