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

Apps Script使用DateJs向数组推送日期出现所有值一致问题

问题原因

核心是日期对象的可变引用问题,原因分为两点:

  1. JavaScript中Date属于引用类型,你往master数组push的不是日期的具体值,而是theDate变量指向的内存引用,所有push进去的引用默认指向同一个日期对象实例。
  2. 你使用的DateJs库的addDays()是可变方法:它会直接修改调用它的原日期对象,同时返回原对象的引用,而非生成新的日期对象返回。

你逐行打印时输出的是修改时的即时值,所以看起来符合预期,但所有push到数组的引用最终都指向最后一次修改后的日期对象(也就是9月10日的实例),所以最终打印数组时所有日期都变成了最后一次修改的结果。

解决方法

每次把日期push到数组前,手动创建新的独立日期实例即可,避免多个引用指向同一个实例被后续修改影响:

function fixedFunction() {
  let master = []

  let a = [1,2]

  a.forEach(function(b) {
    let theDate = Date.today()
    let i = 0
    while (i<2) {
      theDate = Date.parse(theDate).addDays(1)
      Logger.log(theDate)
      // 新建独立日期实例再push
      master.push([b,i, new Date(theDate)])

      i = i+1
    }

  })
  
  Logger.log(master)
}

也可以在调用addDays前就完成实例拷贝,效果一致:

theDate = new Date(Date.parse(theDate)).addDays(1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:36:04