日期对象不是使用setDate预期的

时间:2015-10-17 20:22:04

标签: javascript google-apps-script

var start_date = new Date(ss.getSheetByName('3D Tracker').getRange('I119').getValue());

使用调试工具开始日期评估为Wed Oct 01 2014 00:00:00 GMT-0400 (EDT)我想创建一个新的变量,即开始加10天。

var start = start_date;
var end = new Date(start.setDate(start.getDate() + 10));

Logger的输出是:

start: Sat Oct 11 2014 00:00:00 GMT-0400 (EDT)
end: Sat Oct 11 2014 00:00:00 GMT-0400 (EDT)

我预计会开始保持Wed Oct 01 2014 00:00:00 GMT-0400并结束为Sat Oct 11 2014 00:00:00 GMT-0400 (EDT)。不知何故,我的脚本添加10天开始和结束,而我只是添加10天结束。

我错过了什么吗?环境是基于Javascript的Google Apps脚本。

1 个答案:

答案 0 :(得分:2)

在返回计算出的值之前,

setDate()首先修改它所调用的Date对象。因此,您在从更新的时间戳创建start之前的10天内移动end

如果您想在不更改setDate()的情况下使用start,则需要先从中创建new Date()

var start = new Date(ss.getSheetByName('3D Tracker').getRange('I119').getValue());

var end = new Date(start.getValue()); // initially match `start`
end.setDate(end.getDate() + 10);      // change to 10 days later

对于单行,您还可以计算新的时间戳,10 * 24 * 60 * 60 * 1000等于10天内的毫秒数:

var end = new Date(start.getValue() + 10 * 24 * 60 * 60 * 1000);