如何使用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
相关产品推荐
相关产品推荐

