Christian Seiler: Monat in Tabellenform erstellen

Beitrag lesen

Hallo Jeena,

Erst einmal musst Du wissen, wie viele Tage in dem Monat sind, das kannst Du z.B. kurz selbst programmieren (die sind ja fest bzw. Februar hat alle 4 Jahre einen Tag mehr, alle 100 Jahre wieder nicht und alle 400 Jahre doch wieder)
Da mir das zu komplizert erschien ...

Deine Methode ist aber ineffizent, da sie die Date-Klasse dazu bringt, lauter unnötige Berechnungen durchzuführen. Ich habe Dir Deine Methode mal umgeschrieben, dass sie nur noch elementare Berechnungen durchführt und nicht mehr mit Date rumrechnet.

def days_in_month(m = Time.now.month, y = Time.now.year)  
    require 'date'  
    return days_in_month(m.month, m.year) if m.kind_of? Date  
    if m.kind_of? Integer and m >= 1 and m <= 12 and y.kind_of? Integer  
        odd = m % 2;  
        return (m == 2) ? (28 + ((y % 4 == 0 && (y % 100 != 0 || y % 400 == 0)) ? 1 : 0)) : ((m <= 7) ? (30 + odd) : (31 - odd));  
    end  
    raise TypeError, 'expected numeric (1 to 12 for m) or date'  
end

Gilt natürlich nur für den gregorianischen Kalender.

Viele Grüße,
Christian

--
"I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone." - Bjarne Stroustrup