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

Moment.js给日期加一年:闰年2月场景下结果不符合预期

解决Moment.js加1年时闰年2月日期不符预期的问题

Moment.js的add(1, 'year')默认逻辑是保留原日期的“日”数值,比如2023-02-28加1年时,它会直接将年份改为2024,日期保留28号,不会自动识别闰年并调整到29号。针对财年结束于2月的场景,更优的处理方式是利用endOf('month')方法,直接获取目标年份2月的最后一天:

const currentFiscalYearEndDate = moment("28/02/2023", "DD/MM/YYYY");
const nextFiscalYearEndDate = currentFiscalYearEndDate
  .clone()
  .add(1, "year")
  .endOf("month"); // 自动转为2024-02-29(含时间的话是2024-02-29T23:59:59.999)

// 若只需要日期部分,可再调用startOf('day')
const nextFiscalYearEndDateOnly = nextFiscalYearEndDate.clone().startOf('day');

这个方案的优势在于:

  • 无需手动判断闰年或日期,Moment会自动处理不同年份2月的最后一天(平年28号,闰年29号)
  • 逻辑简洁通用,适用于所有以月末为财年结束日的场景,不止局限于2月

另外,如果你的业务逻辑只关注“财年结束于2月最后一天”,也可以直接构造目标年份的2月最后一天,跳过加1年的步骤:

const currentFiscalYearEndDate = moment("28/02/2023", "DD/MM/YYYY");
const nextYear = currentFiscalYearEndDate.year() + 1;
const nextFiscalYearEndDate = moment([nextYear, 1, 1]) // 2月1日(Moment月份是0-based)
  .endOf("month");

两种方式都能避免手动判断的繁琐,且更符合Moment.js的设计逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:43:36