Daher ist es recht praktisch, dass uns Rails mit einer extrem wohl sortierten Sammlung von Helferlein bei diesem unangehmen Thema unter die Arme greift. Das tut es wie üblich per Erweiterung (Monkey-Patching) der Core-Classen Date, DateTime und Time (der Code ist in der Klasse ActiveSupport::CoreExtensions::DateTime::Calculations). Am besten eignet sich die Rails Console, um sich einen Überblick zu verschaffen. Ein paar Beispiele für schwierige Dinge, die damit einfach gehen:
andi@xwing:~/lc-search-ana$ ./script/console
Loading development environment (Rails 2.3.10)
# Heute:
>> Date.today
=> Mon, 21 Feb 2011
# Gut das ist noch nicht so spannend. Anfang dieser Woche:
>> Date.today.end_of_week
=> Sun, 27 Feb 2011
# Montag in 4 Wochen:
>> Date.today.beginning_of_week.advance(:weeks => 4)
=> Mon, 21 Mar 2011
# Ende des Monats Januar
>> Date.today.beginning_of_year.end_of_month
=> Mon, 31 Jan 2011
# Ein Monat später als 31. Januar ist *28*. Februar
>> Date.today.beginning_of_year.end_of_month.advance(:months => 1)
=> Mon, 28 Feb 2011
Besonders gut gefällt mir dabei, wie leserlich die Operationen hier aneinander reihen lassen. Wer die Java-Calendar-Classen kennt, weiß das diese ähnliche Operationen bieten. Trotzdem vertut man sich dort aufgrund des komplizierten Syntax immer mal wieder. Hier lässt sich die Konstruktion des Datums als englischer Text ablesen. Fein!
* Und wir lassen jetzt die Komplexität der Tageszeiten mit ihren unterschiedlichen Zeitzonen mal außen vor!