如何在Office Scripts中正确为日期累加月份?TypeScript代码修复
修复TypeScript日期范围生成的问题
问题根源
- 引用类型的坑:Date是引用类型,
let addedDate = date只是复制了对象引用,两者指向同一个内存地址。调用setMonth会直接修改原date对象,导致后续循环的基准日期被篡改。 - 增量逻辑错误:循环中用
i作为月份增量,第一次加0个月(i=0)、第二次加1个月、第三次加2个月……最终日期递增的月份数越来越多,不符合“每次递增1个月”的预期。
修复方案
方案一:基于初始日期生成所有递增日期
每次从原始日期出发,创建新的Date实例来计算目标日期,完全避免修改原日期:
const date = new Date("7 December 2023"); const durVal = 10; for (let i = 0; i < durVal; i++) { // 基于初始日期创建新实例,隔离引用 const addedDate = new Date(date); // 累加i个月,生成第i+1个日期(i从0开始) addedDate.setMonth(addedDate.getMonth() + i); console.log(addedDate); }
方案二:逐次递增1个月(连续日期场景)
如果需要生成连续的逐月日期,以上一次的日期为基准,每次创建新实例并加1个月:
const date = new Date("7 December 2023"); const durVal = 10; let currentDate = new Date(date); console.log(currentDate); // 输出初始日期 for (let i = 1; i < durVal; i++) { currentDate = new Date(currentDate); // 创建新实例,避免修改上一个日期 currentDate.setMonth(currentDate.getMonth() + 1); console.log(currentDate); }
内容的提问来源于stack exchange,提问作者Simon Joubert
相关产品推荐
相关产品推荐

