获取星期几

Get day of week

任务:需要获取公历上的星期几和日期(可以是 2009、935、2、342 BP 和时间轴上的任何日期)。

到处都找不到数学模型。 也许以前有人遇到过这个问题?

P.S。实现语言并不重要

如果一月和二月算上一年的最后两个月,工作日与三月初相差⌊(13m-1)/5)⌋天;调整闰年和闰世纪以计算星期几:

function weekday(ccyy, mm, dd) # zeller's congruence
    days := ["Sun", "Mon", "Tues", "Wednes", "Thurs", "Fri", "Satur"]
    if mm < 3 then mm, ccyy := mm + 10, ccyy - 1 else mm := mm - 2
    cc, yy := ccyy // 100, ccyy % 100
    day := (dd + (13 * mm - 1) // 5 + yy + yy // 4 + cc // 4 - 2 * cc) % 7
    return days[day] || "day"

这对于采用公历之前的日期略有不同。