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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:45:37