1

我正在尝试查询 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);
  }
4

1 回答 1

0

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


请务必牢记 Date 值的工作方式。在内部,日期始终是相对于 UTC 的时间戳。也就是说,如果(假设地)你和世界各地的某个人同时调用new Date().getTime(),那么你们都会得到相同的时间戳。(显然不可能,但想象一下你生活在卡通世界中。)

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

于 2022-01-09T16:57:42.553 回答