calendar.js

This module produces arrays of dates to build calendar displays.

The `monthDays` function builds an array of weeks, each with 7 days. Zeroes are used to fill the first and last weeks as needed.
$ cal = new Calendar(1);               // weeks starting on Monday
$ cal.monthDays(2012, 1);              // February is 1 in JavaScript Date API
[
  [0, 0, 1, 2, 3, 4, 5],
  [6, 7, 8, 9, 10, 11, 12],
  [13, 14, 15, 16, 17, 18, 19],
  [20, 21, 22, 23, 24, 25, 26],
  [27, 28, 29, 0, 0, 0, 0]
]
The `monthDates` function builds an array of weeks. Each week is an array of seven Date instances, including dates from the month before or after, as needed to fill the first and last weeks. Optional formatting functions may be passed as third and fourth arguments: one to format each date, the other to format each week. The `monthDays` function calls `monthDates` passing a simple function which returns the day number from a date, or zero if the date does not belong to the month.
$ cal = new Calendar();               // weeks start on Sunday by default
$ m = cal.monthDates(2012,0,          // January is 0 in JavaScript Date API
>       function(d) {return (' '+d.getDate()).slice(-2)}, 
>       function(w) {return w.join(' | ')}
> );
> for (i=0; i<m.length; i++) writeln(m[i]);
 1 |  2 |  3 |  4 |  5 |  6 |  7
 8 |  9 | 10 | 11 | 12 | 13 | 14
15 | 16 | 17 | 18 | 19 | 20 | 21
22 | 23 | 24 | 25 | 26 | 27 | 28
29 | 30 | 31 |  1 |  2 |  3 |  4