【发布时间】:2022-01-11 00:35:44
【问题描述】:
我正在尝试查询 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);
}
【问题讨论】:
-
罪魁祸首可能是你的
getDateStringInTimeZone()函数。当你测试你的代码时,想想你在世界的什么地方。 -
不过,@Pointy
pastHour应该仍然是正确的。 -
好吧,
pastHour取决于当前时间。如果当前是 2022-01-20T08:00:00,则currentTime - 5 hours将是2022-01-20T03:00:00和getHours将返回3。我真的不明白你在问什么。 -
再次,您的本地时区是什么?
.getHours()返回您的 本地 小时,而不是 UTC 小时。 -
只需打印
past.getHours()和new Date().getHours(),您会发现它们相差 5。问题是getDateStringInTimeZone没有达到您的预期。
标签: javascript date google-ads-script