local dates = {} local one_day = os.difftime( os.time{year=1970, month=1, day=2}, os.time{year=1970, month=1, day=1}) function dates.days_in (year) if year % 4 ~= 0 or year % 100 == 0 and year % 400 ~= 0 then return 365 end return 366 end function dates.this_year () return tonumber(os.date"%Y") end function dates.first_week_day (year) year = year or activity.this_year() return os.date("*t", os.time{year=year, month=1, day=1}).wday end function dates.day_of_year (date) local day = tonumber(os.date("%j", os.time(date))) if not day then error"invalid date" end return day end function dates.before (date, days) local time = os.time(date) - days * one_day date = os.date("*t", time) return {year=date.year, month=date.month, day=date.day} end return dates