Why not let FM worry about leap years, etc.? Shorten the month number calc to this:
code:
monthNumber(calc,number) =
(
Position
(
"JanFebMarAprMayJunJulAugSepOctNovDec",
Left(monthName,3),1,1
) + 2
) / 3
Create a calc to find the number of the first day of the week of the month (Sunday = 1, Saturday = 7)
code:
firstDayOfWeek(calc,number) =
DayofWeek(Date(monthNumber, 1, year))
If you'd like to show a few days from the months before and after the current one, use this pattern for calendar days 1-6 and 29-37 (you can use it for all 37 (or 42) days, really)
code:
sun1(calc,number) =
Day(Date(monthNumber, 2 - firstDayOfWeek, year))
mon1(calc,number) =
Day(Date(monthNumber, 3 - firstDayOfWeek, year))
tue1(calc,number) =
Day(Date(monthNumber, 4 - firstDayOfWeek, year))
...
If you'd prefer to show numbers for the current month only, use this for days 1-6 and 29-37:
code:
sun1(calc,number) =
If(Month(Date(monthNumber,2-firstDayOfWeek,year)) = monthNumber,
2 - firstDayOfWeek,
TextToNum( "" )
)
mon1(calc,number) =
If(Month(Date(monthNumber,3-firstDayOfWeek,year)) = monthNumber,
3 - firstDayOfWeek,
TextToNum( "" )
)
tue1(calc,number) =
If(Month(Date(monthNumber,4-firstDayOfWeek,year)) = monthNumber,
4 - firstDayOfWeek,
TextToNum( "" )
)
For calendar days 7-28, use this pattern:
code:
sat1(calc,number) = 8 - firstDayOfWeek
sun2(calc,number) = 9 - firstDayOfWeek
mon2(calc,number) = 10 - firstDayOfWeek
The number in the field name represents the week, or row, of the calendar.
You don't need it for this calendar, but here's an easy way to find the number of days in a month:
code:
monthLength(calc,number) =
Day(Date(monthNumber + 1, 0, year))