D
Daniel Liebig
Hi,
im pretty new to Ruby and i tried to find out how to calculate the date
for the first monday of the first week of the month (i.e. this would be
2007-01-29 for Feb. 2007)
My approach is to get the weekday of the first day of the month and
calculate back from there. By getting the weekday i can tell how far to
calculate back (if necessary at all). If i'm calcualating back from
janurary, i also have to switch back the year.
So this is what i came out with:
year = 2007
month = 2
# get the weekday of the first day of the month
first_wd = Date.new(year, month, 1).wday
# if weekday is sunday
if first_wd == 0
date_modifier = - 6
#if weekday is monday
elsif first_wd == 1
date_modifier = 1
# any other day
else
date_modifier = - ( first_wd - 1 )
end
#if i have to count back, swith month (and year) back
if date_modifier < 0
if month > 1
month -= 1
else
month = 12
year -= 1
end
end
# get date with calculated modifier
date_start = Date.new(year, month, date_modifier )
Ok, this works, but it seems pretty complicated to me. Is there a
smarter (and more readable) way to do this? As far as i know Ruby right
now, it's pretty unusual if an "easy" problem like this needs more than
three lines of code
.
Thx for any help
Regards
Daniel
im pretty new to Ruby and i tried to find out how to calculate the date
for the first monday of the first week of the month (i.e. this would be
2007-01-29 for Feb. 2007)
My approach is to get the weekday of the first day of the month and
calculate back from there. By getting the weekday i can tell how far to
calculate back (if necessary at all). If i'm calcualating back from
janurary, i also have to switch back the year.
So this is what i came out with:
year = 2007
month = 2
# get the weekday of the first day of the month
first_wd = Date.new(year, month, 1).wday
# if weekday is sunday
if first_wd == 0
date_modifier = - 6
#if weekday is monday
elsif first_wd == 1
date_modifier = 1
# any other day
else
date_modifier = - ( first_wd - 1 )
end
#if i have to count back, swith month (and year) back
if date_modifier < 0
if month > 1
month -= 1
else
month = 12
year -= 1
end
end
# get date with calculated modifier
date_start = Date.new(year, month, date_modifier )
Ok, this works, but it seems pretty complicated to me. Is there a
smarter (and more readable) way to do this? As far as i know Ruby right
now, it's pretty unusual if an "easy" problem like this needs more than
three lines of code
Thx for any help
Regards
Daniel