天然气从电子表格中获得错误的日期



我在从电子表格上拾取正确日期时遇到麻烦。

作为测试,我将日期设置为2017年6月27日,并从中减去一天,但调试显示了2017年6月26日的日期。

如何?

debug的打印屏幕

gas使用标准JavaScript日期对象。对象是参考类型,而不是值类型为数字或布尔值(实际上,JS中的所有内容都是对象,并且对象是关联数组,但是为了清楚起见,我们将其抛在一边(。

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

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

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

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

下面的代码是基于创建临时对象的解决方法。因为几个月是零索引,所以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

最新更新