GAS从电子表格中获取错误的日期

时间:2017-06-24 17:36:11

标签: google-apps-script

我在GAS从电子表格中选择正确的日期时遇到了问题。

作为测试,我将日期设置为2017年6月27日,并从中减去一天,但调试显示两个日期为2017年6月26日。怎么会这样?

Print Screen of debug

1 个答案:

答案 0 :(得分:1)

GAS使用标准的JavaScript Date对象。对象是引用类型,而不是值类型,如Number或Boolean(实际上,JS中的所有内容都是对象,对象是关联数组,但为了清楚起见,我们将它放在一边)。

假设您初始化日期并将其分配给另一个变量,如

var d1 = new Date(2017, 6, 26);

var temp = d1;

在此示例中,变量d1包含对日期对象存储在内存中的位置的引用。当您将d1指定给另一个变量时,它会 NOT 复制该对象(正如您所期望的那样,从两个整数值)。相反,它创建了另一个引用,但两个变量都指向内存中的同一个对象!

现在,您更容易理解为什么在Date对象上调用setDate()会修改原始日期变量。根据JS文档,setDate()方法"设置Date对象相对于当前设置月份的开头的日期"。在Date对象上调用方法将影响位于点左侧的对象。

以下代码是基于创建临时对象的变通方法。由于月份为零索引,因此6月为7月。

var d1 = new Date(2017, 6, 26); //Logs Wed Jul 26 00:00:00 GMT+03:00 2017

var temp = new Date(d1.getTime());

var d2 = new Date(temp.setDate(temp.getDate() - 1)); //Logs Tue Jul 25 00:00:00 GMT+03:00 2017