|Think about Loose Coupling|
(1) given a date, what week of the month is it on? for example, Jun 13th 2001 lies in the 3rd week of June 2001.
See the recipes section of the Date::Calc manual page, recipe #5: "How do I calculate the number of the week of month the current date lies in?"
(2) given a date, what is the ordinal of its day of the week in the month? for example, Jun 13th 2001 is the 2nd wednesday of June 2001
See the recipes section of the Date::Calc manual page, recipe #6: "How do I calculate whether a given date is the 1st, 2nd, 3rd, 4th or 5th of that day of week in the given month?"
(3) given two dates, calculate the difference in business days. for example, (Jun 13th 2001)-(Jun 8th 2001) = 3 business days
See method "delta_workdays()" in Date::Calendar
(4) likewise, add n business days to any date
See method "add_delta_workdays()" in Date::Calendar
(5) better support for unix timestamps (epoch time) values
See functions Gmtime(), Localtime(), Mktime(), Timezone(), Date_to_Time() and Time_to_Date() in Date::Calc