Datumsvergleich
daniel
- php
Hallo,
könnt ihr mir einen Tipp geben, wie ich prüfen kann, ob sich zwei Datumsangaben in einem Intervall zueinander verhalten ?
Also ich habe Datum1 und Datum2 und möchte folgendes verifizieren:
1. Ich habe ein Intervall von drei Tagen. Befindet sich Datum2 in dem Intervall, beginnend von Datum1 ?
Ich möchte nämlich prüfen, ob ich ein Element anzeigen soll, wenn es nur beginnend von Datum1 alle drei Tage angezeigt werden darf.
2. Die gleiche Geschichte per Woche: Wie prüfe ich, ob ein Element angezeigt werden soll, wenn es nur beginnend von Datum1 alle X Monate angezeigt werden darf ?
3. Und das gleiche mit Monat ;-)
Wie gehe ich das PHP-technisch an ? Irgendwie habe ich mir jetzt schon den ganzen Morgen Gedanken gemacht, komme aber aufh keinen grünen Zweig.
Vielen Dank für eure Unterstützung,
Daniel
Hallo Daniel,
http://selfhtml.teamone.de/javascript/objekte/date.htm
unter dieser Adresse findest Du ein huebsches Beispiel, wie man die
Differnz von zwei Datuemern in Sekunden ausdruecken kann.
Wenn man nun noch in der Lage waere, das gewuenschte Intervall in
Sekunden umzurechnen, fiele der Vergleich recht simpel aus.
Gruß
Sorry,
ich habe anstatt "PHP" als Thema "Javascript" gelesen.
Vergiß den Quatsch.
Gruß
Ein Tipp: Speicher dein als UNIX-Timestamp.
Sprich: Du hast eine Zahl mit ca. 10 Stellen, die die Zeit in Sekunden seit dem 1.1.1970 wiedergibt.
mit getdate() kannst du dir aus der Zahl dann ganz einfach deine benötigten Elemente raus extrahieren. z.B. Wochentag, Monatstag, Monat, Jahr, Sekunde, Minute, Stunde und noch mehr.
Geht um einiges einfach zum Speichern (du brauchst nur ein int-Feld in der DB) und ist einfach handzuhaben weil du dir alle Formate "zusammenbasteln" kannst.
Und dann dürfte es auch nicht mehr schwer sein die einzelnen Elemente zu vergleichen, weil du als Monatstag einfach z.B. eine 3 hast so dass die Sachen wunderbar einfach miteinander verglichen werden können.
Beispiel:
$time = time(); //gibt den timestampt zurück
$time_array = get_date($time);
$monatstag = $time_array[day];
Irgend wie so ähnlich gehts, hab die genaue Syntax nicht im Kopf.
Schau einfach ins Manual, da stehts ausführlich drin.
Ein Tipp: Speicher dein als UNIX-Timestamp.
Sprich: Du hast eine Zahl mit ca. 10 Stellen, die die Zeit in Sekunden seit dem 1.1.1970 wiedergibt.
1.1.1970 0 Uhr GMT. Insbesondere letztere Angabe ist ein kleines, aber feines Detail, das für Verdruss sorgen kann :)
mit getdate() kannst du dir aus der Zahl dann ganz einfach deine benötigten Elemente raus extrahieren. z.B. Wochentag, Monatstag, Monat, Jahr, Sekunde, Minute, Stunde und noch mehr.
getdate() hilft ihm nicht viel. Es ist einfacher, beide Daten (mit gleicher Uhrzeit, z.B. 0 Uhr) mittels mktime() in besagte Sekundenzahl umzuwandeln und dann zu prüfen, ob die Differenz der beiden Zeiten durch drei Tage (genauer gesagt deren Äquivalent in Sekunden) ohne Rest teilbar ist (Rest: Modulo, Operator %).
Das Verfahren hat allerdings seine Tücken: Wie oben bereits angedeutet, ist diese Sekundenzahl in Greenwhich-Zeit (GMT) - und die kennt keine Sommer-/Winterzeitumstellung. Hingegen gibt es hierzulande zwei Tage im Jahr, die statt 24 Stunden 25 bzw. 23 Stunden haben. Beachtet man das beim Ausrechnen der Sekunden für "drei Tage" nicht (die ja in GMT-Zeit sein müssen, nicht in lokaler Zeit), bekommt man ein falsches Ergebnis.
Da es hier aber nur um Einheiten von Tagen und mehr geht, kann man hier auch auf gmmktime() zurückgreifen. Diese Funktion rechnet direkt in GMT, unerwartete "Umrechnungsfehler" fallen weg.
Gruß,
soenk.e