如何不使用new Date()判断当月或指定月1号的星期几
问题解答
问题2:已知某日期的星期,求当月1号的星期几(通用解法)
核心逻辑是利用日期差的星期偏移计算,适用于所有以周日为星期索引0的编程语言:
步骤与公式
- 计算目标日期与当月1号的天数差:
daysDiff = 目标日期日数 - 1 - 计算天数差对7取余(得到周内偏移量):
offset = daysDiff % 7 - 用已知的星期索引(周日=0,周一=1…周六=6)减去偏移量,通过
+7和%7处理负数边界,得到1号的星期索引:firstDayWeekIndex = (已知星期索引 - offset + 7) % 7
实例验证(已知2024年5月18日为周六,索引6)
代入公式计算:
firstDayWeekIndex = (6 - (18-1)%7 +7) %7 = (6-3+7)%7 = 10%7 = 3
索引3对应周三,与实际日期一致,验证正确。
问题1:根据当前日期(不使用new Date())求当月1号的星期几
逻辑和问题2完全一致,只需先获取两个关键值(可通过系统环境变量、用户输入等非Date API渠道获取):
- 当前日期的日数:
currentDay - 当前日期的星期索引:
currentWeekIndex
直接套用公式:
firstDayWeekIndex = (currentWeekIndex - (currentDay -1) %7 +7) %7
边界情况示例
- 若当前日期就是1号:
currentDay-1=0,公式结果等于currentWeekIndex,符合预期 - 若当前是周日(索引0)、日期为2号:
(0 -1 +7)%7=6,对应周六,与实际一致
内容的提问来源于stack exchange,提问作者NWNishungry
相关产品推荐
相关产品推荐

