Zeitberechnung ist wegen der ständigen, unregelmäßigen Grenzen wie Tag-, Monats, Jahresende eine der komplexesten Operationen überhaupt. Aber man kann es sich einfach machen:
Zeiten berechnest du am Besten mit den Integer-Zeitstempeln (= Sekunden seit 1.1.1070 00:00 GMT), NUR die kannst du direkt per < > und = vergleichen. Alles andere ist sinnlos, so du nicht alles folgendermaßen abbildest:
-
vollständig (also immer komplett Datum und Zeit im String)
-
in sinnvoller Syntax, am besten ISO YYYYMMDDHHMiMiSS usw, damit die einem String-Vergleich (<, > usw) entsprechen, also „langsamste“ Änderung links
Achtung: bei Stringvergleich ist „11:20“ < „2:46“!
also 3. immer(!!) in konstanter Länge, also jede funktionale Stelle (Jahr, Monat,Tag… Minute…) muß links mit 0 auf gleiche Länge aufgefüllt werden!
Dann wird „11:20“ > „02:46“.
…das alles kannst du dir aber ersparen, wenn du einfach NUMERISCH die Sekunden betrachtest in der sogenannten „Epoche“ also seit 1.1.70 usw.
Diese Werte werden in den Befehlen wie time, date usw schon geliefert bzw als Parameter erwartet
Stell dir mal vor, eine ZeitDIFFERENZ aus den echten Daten zu berechnen! Unter Beachtung von Monats- und Jahresende, die ja dazwischenliegen könnten, inkl. unterschiedlich langer Monate und Schaltjahr usw… Auch ein nur wenige Sekunden dauernder Serverprozess kann genau über so eine Grenze reichen…
Mit den Zeitstempeln ist eine solche Differenz easy. Es ist einfach die numerische Differenz der „absoluten“ Sekundenwerte beider Ereignisse. Das Ergebnis teilst du dann einfach modulo bzgl. Sekunden, Minuten, Stunden, Tag (60, 60, 24 usw.), oder du bearbeitest es numerisch als „absolute“ Sekundenwerte weiter.
Und so kannst du dan auch entscheiden, ob die aktuelle Zeit noch vor oder schon nach Sonnenauf- oder Untergang ist. Bleib einfach bei den absoluten Sekundenwerten, manchmal auch genannt „Timestamps“. Die PHP-Funktionen zum SA und SU liefern die ja eh, und time() liefert dir die aktuelle Zeit. Ansonsten gibt es Umrechnungsfunktionen.
näheres findest du unter php.net z.B. beim Befehl time() oder date()
Gruß Gerd