(getTime() - 5 * 3600 * 1000) 需要 3 小时而不是 5

(getTime() - 5 * 3600 * 1000) takes 3 hours back and not 5

我正在尝试查询 5 小时前那个小时的统计信息。

当我 运行 这段代码时,我在日志中看到本地时间是 6,所以我希望 pastHour 是 1,但它说是 3。

为什么?

var HOURS_BACK = 5;

function main() {

  var past = new Date(new Date().getTime() - HOURS_BACK * 3600 * 1000);
  var pastHour = past.getHours();
  var pastDateStr = getDateStringInTimeZone(past, 'yyyy-MM-dd');
  query = "SELECT customer.id, metrics.impressions, segments.hour FROM customer WHERE metrics.impressions = 0 AND segments.hour = " + pastHour + " AND segments.date = '" + pastDateStr + "'";
  Logger.log("query " + query);
  }

edit — 我将保留下面的内容,但我现在认为问题中发布的内容无法解释 OP 的奥秘。


牢记日期值的工作原理很重要。在内部,日期是 总是 一个 UTC 相对时间戳。也就是说,如果(假设地)您和世界各地的某个人 同时 呼叫 new Date().getTime(),你们将获得相同的时间戳。 (显然不太可能,但想象一下你生活在卡通世界中。)

但是,像 .getHours() 这样的日期 API 在您的 本地 时间工作。当地时间和世界时的差异一直让很多人感到困惑,当你的 date/time 值随后涉及数据库操作时,情况只会变得更糟,同样的问题可能会再次出现。