making a monthly calendar...

M

Mikkel Bruun

Siep said:
Yes. Here is my effort anyway:

require 'date'
require 'enumerator'

def days_to_show(year, month, num_week_rows)
# returns an array of the dates in month,
# with the last days of the preceding month
# and the first days of the next month

first_of_month = Date.new(year, month, 1)
first = first_of_month - (first_of_month.wday)+1
# +1 for weeks starting on monday, remove for weeks starting on sunday
last = first + (num_week_rows * 7)
(first...last).to_a
end

days = days_to_show(2008, 3, 6)
days.each_slice(7) do |week|
print "| "
week.each{|day| print day.to_s + "\t| "}
puts
end

The only thing noteworthy is the range of dates, which produces an
array.

Regards,

Siep

That is really an elegant solution and it works between years
also....but....

What happens when you run ays = days_to_show(2008, 6, 6) ??? it shows
june as starting on sunday 2 of june....

really wierd

Mikkel
 
T

Todd Benson

Siep Korteling wrote:
That is really an elegant solution and it works between years
also....but....

What happens when you run ays = days_to_show(2008, 6, 6) ??? it shows
june as starting on sunday 2 of june....

really wierd

Mikkel

That is weird! Not only that, but for (2008, 6, 1), it gives me a
month of 2 weeks, the second having only 2 days.

Todd
 
T

Todd Benson

That is weird! Not only that, but for (2008, 6, 1), it gives me a
month of 2 weeks, the second having only 2 days.

Never mind that. It's just 1 week.

Todd
 
S

Siep Korteling

Mikkel Bruun wrote:
(...)
(...)

What happens when you run ays = days_to_show(2008, 6, 6) ??? it shows
june as starting on sunday 2 of june....

really wierd

Mikkel

Argh.. Date#wday gives with a zero for sunday. But there is good luck to
be found in ruby. With Date#cwday Monday is commercial day-of-week 1;
Sunday is commercial day-of-week 7. Fine by me.


require 'date'
require 'enumerator'

def days_to_show(year, month, num_week_rows = 6)
# returns an array of the dates in month,
# with the last days of the preceding month
# and the first days of the next mont

first_of_month = Date.new(year, month, 1)
first = first_of_month - first_of_month.cwday + 1
# +1 for weeks starting on monday, remove for weeks starting on sunday
last = first + num_week_rows * 7
(first...last).to_a
end

1.upto(12) do |month|
days = days_to_show(2008,month)
days.each_slice(7) do |week|
week.each{|day| print "| " + day.mday.to_s + "\t"}
puts "|"
end
puts
end


Behaves better.
Regards,

Siep
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,764
Messages
2,569,567
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top