如何用Moment.js根据日期数与月份数生成日期字符串?排查错误
问题描述
给定参数:dayNumber: 28,monthNumber: 2,期望通过Moment.js生成日期字符串"2022-02-28"。尝试了以下代码:
const date = moment() .month(monthNumber) .days(dayNumber) .format("YYYY-MM-DD");
但得到的结果类似"2022-03-17",请问哪里出错了?
问题分析与解决
你的代码存在两个关键错误:
- Moment.js的月份采用0索引规则:1月对应0,2月对应1,你传入
monthNumber:2实际会将月份设置为3月,这是日期偏移的核心原因之一。 - 误用了日期设置方法:
days()方法用于设置一周中的星期几(0代表周日,6代表周六),而设置当月具体日期需要使用date()方法。
另外,moment()默认基于当前日期初始化,若不指定年份,可能会使用当前年份,建议显式指定2022年避免意外。
修正后的代码
const dayNumber = 28; const monthNumber = 2; const date = moment() .year(2022) .month(monthNumber - 1) // 转换为Moment要求的0索引月份 .date(dayNumber) .format("YYYY-MM-DD");
更简洁的写法
直接通过年月日数组创建日期(数组内月份同样为0索引):
const date = moment([2022, monthNumber - 1, dayNumber]).format("YYYY-MM-DD");
执行上述代码即可得到期望的"2022-02-28"。
内容的提问来源于stack exchange,提问作者keyboard_connection
相关产品推荐
相关产品推荐

