Christian Seiler: Datums- und Zeitberechnung mit PHP, Schaltjahre, Zeitzonen

Beitrag lesen

Hallo Dodwin,

Nur bedingt leider, da mir der Monat als String (z.B. Sep) vorliegt. Ich muss also erst die Monatszahl für mktime herausfinden...

Ja gut, aber Du hast ja schon ein array_search in Deiner anderen Funktion. Und _das_ macht den Braten nicht fett. Noch schneller als array_search wäre übrigens das hier:

$monate = array (  
   'Jan' => 1,  
   'Feb' => 2,  
   ...  
);  
  
$monat_num = $monate[$monat];

(Liegt daran, dass ein Zugriff über den Array-Schlüssel viel häufiger schneller ist als den Array durchzugehen bis der erste Wert passt - wobei bei 7 Einträgen der Unterschied vmtl. minimal ist.)

Die Funktion soll nur Werte von 1990 bis ca. 2020 (wenn überhaupt...) verarbeiten.

Für diesen Zeitraum gibt die Funktion einen korrekten Wert aus[...]?

Soweit ich das auf den ersten Blick sehen kann, ja. Allerdings möchte ich Dich auf eines aufmerksam machen: Wenn Du den Code jetzt schreibst, weißt Du vielleicht noch, was für Limitationen der hat - aber wenn Du sagen wir in 1 Jahr nochmal ne Wochentagsfunktion brauchst, dann riskierst Du, die Funktion einfach zu kopieren ohne darüber nachzudenken und dann fliegt sie Dir irgendwo anders um die Ohren. Daher sollte man - meiner Ansicht nach zumindest - *immer* zusehen, dass Funktionen, die man schreibt, möglichst korrekt sind - dann muss man sich bei der Wiederverwertung keine Gedanken machen. Zudem: Meine korrektere Funktion mit größerem Wertebereich wäre hier sowieso schneller. ;-)

Die Daten die ich erhalte sind Log-Daten.

Ok, dann leuchtet natürlich schon ein, dass Du *sehr* oft Timestamps erzeugen musst. Sag das doch gleich. ;-)

Aber ernsthaft, wenn's Logfiles sind: Normalerweise steht doch bei Logfiles das Zeitzonenoffset mit dabei? Bei Apache-Logs in der Default-Config z.B. so: "[02/Oct/2007:19:43:24 +0200]" - das "+0200" ist ja das Offset zu GMT in der Form +HHMM (oder -HHMM). In dem Fall wäre die lokale Zeitzone anzunehmen sowieso falsch, um einen korrekten Timestamp zu erhalten müsstest Du sowieso gmmktime() auf den ersten Teil anwenden und dann das Offset in Sekunden auf den Timestamp addieren (oder subtrahieren, wenn's negativ ist).

Viele Grüße,
Christian