You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于公历月份首日计算该月某星期几的天数(非迭代)

计算指定月份中目标星期几的天数(非迭代解法)

核心逻辑

一个月最少28天(刚好4周),因此每个星期几至少有4个。要判断是否有5个,只需看该月第29天到最后一天的这几天里,是否包含目标星期几——有则总数为5,无则为4,完全不需要遍历全月。

具体步骤

先明确三个已知参数(编号规则统一即可,以下用0=周日、1=周一……6=周六为例):

  • 首日星期数:该月1号是星期几的编号
  • 目标星期数:要统计的星期几的编号
  • 该月总天数:对应月份的总天数(如5月31天、4月30天)
  1. 计算该月超出28天的天数:extra_days = 该月总天数 - 28(结果只能是1、2、3)
  2. 计算目标星期与首日星期的间隔:offset = (目标星期数 - 首日星期数) % 7
  3. 直接判断:如果offset < extra_days,说明目标星期在第29天及之后的日子里,总数为5;否则为4。

示例验证

  • 2026年5月:首日是周四(编号4),总天数31,extra_days=3;目标是周二(编号2),offset=(2-4)%7=5。5<3不成立,因此5月有4个周二,符合实际。
  • 2024年闰年2月:首日是周四(编号4),总天数29,extra_days=1;目标是周四(编号4),offset=(4-4)%7=0。0<1成立,因此2月有5个周四(1、8、15、22、29号),正确。
  • 2024年4月:首日是周一(编号1),总天数30,extra_days=2;目标是周二(编号2),offset=(2-1)%7=1。1<2成立,因此4月有5个周二(2、9、16、23、30号),正确。

代码实现示例(Python)

def count_weekday_in_month(first_day_week, target_week, month_days):
    extra_days = month_days - 28
    offset = (target_week - first_day_week) % 7
    return 5 if offset < extra_days else 4

内容的提问来源于stack exchange,提问作者Michel de Ruiter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.02 00:43:12