计算机如何计算出任意日期的工作日
自公历生效以来的每个日期都有一个正确的工作日,并且可以仅通过算术计算出来 - 不需要日历应用程序或查找表。其基本思想与 Zeller 的同余式和 Sakamoto 的方法形式化的相同:从已知参考点计算总天数,然后将该计数模 7 得出工作日。
现代软件并不按字面意思运行经典的泽勒公式——它通常在内部使用预推公历来跟踪天数——但结果在数学上与那些笔和纸算法计算的结果相同。这种一致性正是为什么这个计算器、纸质年鉴和心算技巧都在同一日期得出相同答案的原因。
年复一年的一天(或两天)轮班
正常的一年有 365 天,即 52 周加上一天。剩下的一天就是为什么固定日期(例如 7 月 4 日)每年都会向前移动一个工作日:一年的星期二,下一年的星期三,依此类推。
闰年打破了这种稳定的模式。由于 2 月 29 日是在一年中插入的,因此与前一年相比,从 3 月 1 日起的任何日期都会向前跳转两个工作日,而不是一个工作日。在闰日实际过去之前,一月和二月的日期不会受到影响。
世纪标记上还有一个问题:能被 100 整除的年份不是闰年,除非它们也能被 400 整除。根据该规则,2000 年是闰年;2000 年是闰年。 1900 年不是,2100 年也不会——如果您计算的是过去或未来的工作日,这个细节就很重要。
检查工作日的历史日期
由于工作日是日期本身的固定属性,因此相同的计算可用于验证历史记录 - 确认记录的事件实际上发生在消息来源声称的工作日,或计算出远祖出生于一周中的哪一天。
对于 1582 年之前的日期需要注意的是:格里高利改革之前使用的日历(儒略历)的闰年规则略有不同,因此转换之前日期的工作日计算取决于历史记录本身使用的日历。
超越单个日期:发生次数和工作日计数
一旦您可以计算一个日期的工作日,同一数学就可以得出三个更有用的问题:
- Next/previous occurrence — the closest date before or after a given day that falls on a specific weekday, useful for finding "the next Friday" from any starting point.
- 计算工作日 - 给定工作日(例如星期一)在日期范围内出现的次数,这与计算工资周期或定期会议日期背后的数学原理相同。
- 查找所有发生的事件 - 特定工作日在某个范围内的每个日期的完整列表,方便安排每周重复的任何事情。
如果您需要的是两个日期之间的确切天数,或者目标日期的运行倒计时,则 日计数器 直接处理它。要从日期中添加或减去年、月或周,请参阅 日期计算器。