如何基于条件使用Moment.js将日期设置为当年或次年6月1日
优化方案说明
你的现有实现逻辑本身是正确的,主要可以从减少重复实例化、提升可维护性、降低理解成本三个方向优化:
优化点说明
- 避免重复调用
moment()获取当前时间,极端场景下如果执行代码时刚好跨零点/跨年,前后获取的时间不一致会导致逻辑出错 - 去掉重复的日期设置逻辑,后续如果要调整validTo的基准日期(比如从6月1日改成7月1日),只需要修改一处即可
- 用moment内置的时间比较方法替代月份索引判断,不需要额外记忆moment的月份从0开始计数的规则,避免后续维护写错索引
优化后代码示例
// 仅实例化一次当前时间,全局复用 const now = moment(); const validFromDate = now.toDate(); // 先构造当年6月1日的日期实例 const validToMoment = now.clone().set({ month: 5, date: 1 }); // 如果当前时间晚于或等于当年6月1日,直接加1年即可 if (now.isSameOrAfter(validToMoment)) { validToMoment.add(1, 'year'); } const validToDate = validToMoment.toDate();
如果偏好更简洁的链式写法,也可以用下面的实现,逻辑完全一致:
const now = moment(); const validFromDate = now.toDate(); const validToDate = now.clone() .set({ month: 5, date: 1 }) .add(now.isSameOrAfter(now.clone().set({ month: 5, date: 1 })) ? 1 : 0, 'year') .toDate();
内容的提问来源于stack exchange,提问作者Karry Bee
相关产品推荐
相关产品推荐

