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

如何使用Moment.js获取上一个8月1日的日期?

获取上一个8月1日的Moment.js实现方案

嘿,这个需求其实很好解决——虽然Moment.js没有直接的previous方法,但我们可以通过它的日期操作API组合出想要的结果。核心思路是判断当前日期和今年8月1日的先后关系,再决定年份是今年还是去年。

我给你两种常用的实现方式,你可以根据习惯选:

方法一:先构造今年8月1日,再调整年份

这种方式逻辑直观,先拿到今年的8月1日,再根据当前日期判断是否需要回退到去年:

// 创建当前日期的moment实例
const currentDate = moment();
// 构造今年的8月1日(注意:Moment.js的月份是0索引,8月对应数字7)
let lastAugustFirst = currentDate.clone().month(7).date(1);

// 如果今年的8月1日还没到(比如现在是6月),就把年份减1
if (lastAugustFirst.isAfter(currentDate)) {
  lastAugustFirst.subtract(1, 'year');
}

// 输出格式化后的日期,比如YYYY-MM-DD格式
console.log(lastAugustFirst.format('YYYY-MM-DD'));

方法二:直接计算目标年份

这种方式更简洁,先通过月份判断目标年份,再直接构造日期:

const currentDate = moment();
// 判断当前月份是否已经过了8月(含8月):月份>=7就用今年,否则用去年
const targetYear = currentDate.month() >= 7 ? currentDate.year() : currentDate.year() - 1;
// 直接用[年, 月, 日]数组构造目标日期(8月对应7)
const lastAugustFirst = moment([targetYear, 7, 1]);

console.log(lastAugustFirst.format('YYYY-MM-DD'));

关键注意点

一定要记住:Moment.js的月份是从0开始计数的,所以1月是0,8月就是7,这是很多人容易踩的坑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:49:04