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
相关产品推荐
相关产品推荐

