Sven Rautenberg: Zeitumstellung deaktivieren

Beitrag lesen

Moin!

Falscher Ansatz Dino. Du brauchst ein Modul, was mit ganzen Tagen rechnet. Willste?

Joa DateTime :(.
Das dumme ist das ich DateTime vor einem Jahr (oder sind es mittlerweile schon 2?) nicht kannte. Ergo hab ich meine eigene Klasse aufgebaut. Und die hab ich dann in mein System eingebaut. Ist auch relativ leicht zu handeln. Das tolle ist, dass ich eine Methode zur Ausgabe habe und jenachdem welches Land eingestellt ist, bekomme ich das Datum in der jeweiligen Landesausgabe. Das ist enorm praktisch, da ich mir als aufrufer keine Gedanken über die Umrechung machen brauche. Naja heute hätte ich glaub ich eine Klasse erstellt die von DateTime ableitet...echt doof.

Das wäre ebenfalls der falsche Ansatz.

Du hast offenbar zwei Aufgaben: Erstens die Ausgabe in Mehrsprache. Zweitens das Iterieren über einen Zeitraum.

Letzteres geht in einem einigermaßen aktuellen PHP (5.3) ganz einfach, und zwar mit DatePeriod:

Beispiel 1 aus der Doku

<?php  
$start = new DateTime('2012-07-01');  
$interval = new DateInterval('P7D');  
$end = new DateTime('2012-07-31');  
$recurrences = 4;  
$iso = 'R4/2012-07-01T00:00:00Z/P7D';  
  
// All of these periods are equivalent.  
$period = new DatePeriod($start, $interval, $recurrences);  
$period = new DatePeriod($start, $interval, $end);  
$period = new DatePeriod($iso);  
  
// By iterating over the DatePeriod object, all of the  
// recurring dates within that period are printed.  
foreach ($period as $date) {  
    echo $date->format('Y-m-d')."\n";  
}  
?>

Mit anderen Worten: Wenn du dir den ISO-String für sich wiederholende Daten korrekt zusammenbaust, ist das Erzeugen eines Objektes, was dir jeden Tag in einem bestimmten Zeitraum foreach-fähig ausspuckt, genau zwei Zeilen lang. Das dürfte kürzer sein, als dein aktueller Code, der mit den Sekunden rechnet.

Man muss es allerdings nicht so kurz machen, die Datumsgrenzen in DateTime-Objekte zu verpacken funktioniert ja auch recht simpel.

- Sven Rautenberg