Kategorien

Suchen


Aktuelle Artikel

Archiv

Ruby on Rails

Ruby on Rails: Datum aus Kalenderwoche, Jahreszahl und Wochentag berechnen

Sonntag, 30.08.2009

Zunä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.2009

Viele “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