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

Firefox中JavaScript获取月内首个周一的while循环运行过慢求助

解决Firefox中获取每月首个周一的性能问题

嘿,我太懂你的困扰了!Firefox对日期循环的处理确实比Chrome敏感不少,那种逐天递增的while循环在某些边界场景下很容易卡甚至崩溃——虽说最多也就跑6次,但Firefox的日期引擎好像对这种连续修改Date对象的操作优化得不太好。

其实根本不用循环,用数学计算偏移量的方法就能直接算出当月第一个周一,高效又稳,所有浏览器都能秒出结果:

// 假设你已经有了目标年份和月份(注意:月份是0-based,比如1月对应0)
const targetYear = 2024;
const targetMonth = 8; // 代表9月

// 先初始化到当月第一天
const firstMonday = new Date(targetYear, targetMonth, 1);

// 直接计算需要偏移的天数,一步跳到第一个周一
const dayOffset = (1 - firstMonday.getDay() + 7) % 7;
firstMonday.setDate(firstMonday.getDate() + dayOffset);

console.log(firstMonday); // 输出当月第一个周一的完整日期

简单解释下逻辑:

  • getDay() 返回0(周日)到6(周六)的数字
  • (1 - firstMonday.getDay() + 7) 是为了确保结果始终为正数(避免出现负数偏移的情况)
  • 取模7保证偏移量在0到6之间:
    • 如果当月第一天就是周一,偏移量为0,直接用当天
    • 如果是周日,偏移量为1,加1天就到周一
    • 如果是周二到周六,偏移量会精准算出距离下一个周一的天数(比如周六的话,偏移量是2,加2天正好到周一)

这种方法完全避开了循环,一次计算就能得到结果,不管在Chrome还是Firefox里都不会有性能问题,更不会崩溃。

内容的提问来源于stack exchange,提问作者Chayma Atallah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:44:29