Ruby on Rails
Ruby on Rails: Datum aus Kalenderwoche, Jahreszahl und Wochentag berechnen
Sonntag, 30.08.2009Zunächst wird ein Datumsobjekt erstellt, dass auf den 1. Januar des Jahres zeigt.
date = Date.parse("01-01-"+year)
Dann wird an Hand der Tageszahl (Montag == 1) der Offset berechnet.
if date.cwday <= 4
# Donnerstag oder kleiner: Zurueck rechnen auf Montag
x = -8 + (date.cwday+1);
else
# Offset auf Folge-Woche
x = 8 - date.cwday
end
Mit einer kleinen Hilfsfunktion wird der Offset bezüglich des gewünschten Wochentages angepasst.
x += day_number(day_string) - 1
Zu guter letzt wird das Datum berechnet.
date + x + ( 7*(week-1) )
Hier der komplette Code:
# Berechnet das Datum zu einem Wochentag in einer Kalenderwoche in einem Jahr
def week_to_date(week, year, day_string)
# Datums Objekt des ersten Jahrestages
date = Date.parse("01-01-"+year)
# Pruefen des nummerischen Wertes des Wochentages
# 4: Donnerstag - 1. KW ist die Woche mit dem ersten Donnerstag im Jahr
if date.cwday <= 4
# Donnerstag oder kleiner: Zurueck rechnen auf Montag
x = -8 + (date.cwday+1);
else
# Offset auf Folge-Woche
x = 8 - date.cwday
end
# Offset an Wochentag anpassen
x += day_number(day_string) - 1
# Datum berechnen aus 1.1. des Jahres + Offset + Anzahl der Wochen
date + x + ( 7*(week-1) )
end
def day_number(day_string)
days = {
'Mo' => 1,
'Di' => 2,
'Mi' => 3,
'Do' => 4,
'Fr' => 5,
'Sa' => 6,
'So' => 7
}
days[day_string]
end
Ruby on Rails: Datums Formatierung
Sonntag, 23.08.2009Viele “Gerüchte” kursieren im Netz umher, wie man ein Datum aus der Datenbank am besten in der View formatiert. Der einfachste Weg ist aber wohl folgender…
Wir haben unser News ausgelesen und in der Variablen @news in unsere View. Das Datum liegt im Feld created_at. Dann können wir über die Funktion strftime(format) das Datum formatieren.
<% @news.each do |news| %>
<div class="news_date">
<%=h news.created_at.strftime('%d.%m.%y - %H:%M')+"h" %>
</div>
<% end %>
Die Ausgabe wäre etwas wie => 31.01.2009 - 16:45 h
Zum weiterlesen:
Formatierungsoptionen: Date Format Options
Ruby Class: Date Class