// der php hacker

// archiv

Wusstest du schon …

Geschrieben am 30. Dez 2009 von Cem Derin

… dass man mit strtotime wesentlich einfacher und korrekter Zeitenräume addieren oder abziehen kann, als es von Hand überhaupt möglich ist? Denn nicht jeder Tag hat 86400 Sekunden. Außerdem umgeht man auch noch das Antipattern der Magic Numbers.

$nextWeek = strtotime('+1 week');
$twoMonth = strtotime('+2 month');
$reallyScrewed = strtotime('+2 years +1 month +1 day +4 hours +7 minutes');

Sieht doch wesentlich besser aus, oder? Und man weiß genau, was hier passiert. Als zweiten Parameter kann man übrigens einen UNIX-Timestamp angeben, der als Ausgangszeitpunkt verwendet wird.

Während den Tagen bis zum neuen Jahr werde ich immer mal wieder ein bisschen aus dem Trick- und Nähkästchen plaudern. Die arbeiten an Brawler stagnieren derzeit ob des Fresskomas unter dem ich grade leide, aber da mich mein gähnend Leerer Feedreader annervt, will ich wenigstens dazu beitragen, dass ein wenig passiert.

Geschrieben in Entwicklung, PHP 10 Kommentare

#001
30. Dez 2009

Nicht jeder Tag hat 86.400 Sekunden? Welcher denn nicht? Oder steh ich gerade auf dem Schlauch?


#002
30. Dez 2009
Cem Derin

Zwei mal im Jahr stellen wir die Uhr eine Stunde vor bzw. zurück. Damit gibt es zwei Tage im Jahr die nicht 86400 Sekunden entsprechen. Das klingt zwar scheinbar nach einem kleinen Zeitraum, in dem der Fehler auftreten kann, aber sobald man mit Zeiträumen arbeitet, in denen diese Tage liegen, hat man rechnerisch kein korrektes Ergebnis mehr und je nach dem wie man die Daten auswertet erhält man völlig andere Daten als erwartet.


#003
30. Dez 2009
Otto

@Thomas, es gibt die Umstellung zwischen Sommer- und Winterzeit und sogar Schaltsekunden. Hmm, fällt mir gerade spontan noch etwas anderes ein..?


#004
30. Dez 2009

Alles klar. An diese beiden Tage habe ich eben nicht gedacht, sondern eher nach irgendetwas mit Schaltjahr & Co. gesucht.

Aber so ist logisch. Danke.


#005
30. Dez 2009

Echt? Schaltsekunden? Da mach ich mich mal schlau. Jaja, die Zeit. Ein kompliziertes Thema. Fragt mal meine Herzdame …

Euch trotzdem einen guten Rutsch ins neue Jahr. Mit vielen genussvollen, tollen Sekunden :-)


#006
30. Dez 2009
m!nus

Schaltsekunden werden wohl kaum mit eingerechnet, die werden eher nur bei der PTB dazuaddiert und dann zu allen gesynct.
Aber ne ganz nützliche Funktion.


#007
30. Dez 2009

Danke für die “wusstest du schon…” Reihe.

Hier gibt es tatsächlich immer wieder was neues, wie zB das mit den 86400 Sekunden.

Hab bisher auch immer geglaubt, dass das reicht.


#008
30. Dez 2009
Pekka

strtotime() ist geil. Das kann fast alles. “last saturday”, “next february”…. Und um ein Haar kann es sogar:

strtotime(“Last time I had a drink”);


#009
31. Dez 2009

strtotime() ist nützlich, ich verwende aber grundsätzlich fast nur noch DateTime-Objekte. Ich hab mir dazu eine eigene Klasse gebaut, die von DateTime erbt und einige praktische Methoden nachrüstet (Differenzen ausrechnen, als ISO ausgeben, …). Nachdem DateTime alles parsen kann, was strtotime kann, kommt das am Ende aufs Selbe raus, ist aber noch weniger “Magic Numbers” als strtotime (wo man ja praktisch nur timestamps rausbekommt).


#010
31. Dez 2009
Cem Derin

@Pekka: Schön, dass du endlich einen Gravatar hast ;)

// kommentieren

// senden
theme von mir, software von wordpress, grid von 960 grid system. funktioniert in allen browsern, aber der safari bekommt das mit der schrift am schönsten hin.