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
"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