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

Moment.js获取当月第一天星期数(1-7)返回0异常问题求助

问题原因与解决办法

嘿,这个问题我之前也踩过坑!核心原因是 Moment.js 里的 day() 方法的取值规则和你想要的不一样:

  • Moment 的 day() 是0对应周日,1到6分别对应周一到周六,所以当你取2018年4月1日(周日)的 day() 值时,自然会返回0,和你期望的1-7(周日=7)规则不匹配。
  • 你当前日期是周六时 moment().day() 返回6,刚好和你的预期一致,其实只是个巧合~

下面给你两种简单的解决思路:

思路一:直接用 isoWeekday() 方法

Moment 专门提供了 isoWeekday() 方法,它的取值规则完美匹配你的需求:1代表周一,7代表周日。直接替换成这个方法就搞定了:

// 获取当月第一天的星期数(1-7)
moment().startOf('month').isoWeekday();

拿你的例子验证:2018年4月1日调用这个方法会返回7,当前周六调用会返回6,完全符合预期。

思路二:对 day() 的结果做转换

如果你不想换方法,也可以给 day() 的返回值加个小逻辑,把0(周日)替换成7,其他值保持不变:

const dayNum = moment().startOf('month').day();
const targetDay = dayNum === 0 ? 7 : dayNum;

或者用更简洁的写法(利用0在逻辑判断中是假值的特性):

const targetDay = moment().startOf('month').day() || 7;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:21:54