我正在使用应用程序脚本。
我正在将工作表行解析为对象,并试图按时间对其进行过滤,以获取最近一小时的最新条目
[{relativeRow=257.0, ME=, Index=false, FROM=1.xxx, absoluteRow=258.0, Timestamp=Fri Sep 20 14:17:50 GMT-04:00 2019, CONVERSATION=R:Yes!}, {relativeRow=256.0, ME=, Index=false, FROM=1xxx, absoluteRow=257.0, Timestamp=Fri Sep 20 12:18:00 GMT-04:00 2019, CONVERSATION=R:yes yes}, {relativeRow=255.0, ME=, Index=false, FROM=xxx, absoluteRow=256.0, Timestamp=Thu Sep 19 11:54:29 GMT-04:00 2019, CONVERSATION=R:Yes1}]
我有:
var MILLIS_PER_HOUR = 1000 * 60 * 60; // 60 MINUTES
var now = new Date()
var oneHouragoTS = now.getTime() - MILLIS_PER_HOUR;
Logger.log(oneHouragoTS);
var pendingRows = descending.filter(function (row) {
Logger.log(row['Timestamp']);
var rowDate = new Date(row['Timestamp'])
var rowTS = rowDate.getTime()
Logger.log('rowTS');
Logger.log(rowTS);
Logger.log('oneHouragoTS');
Logger.log(oneHouragoTS);
var diff = rowTS - oneHouragoTS ;
Logger.log('diff');
Logger.log(diff);
return (diff>0)
});
输出:
[19-09-20 15:40:54:016 EDT] getResponsesOverLastHour
[19-09-20 15:40:54:017 EDT] 1.569004854016E12
[19-09-20 15:40:54:017 EDT] Fri Sep 20 14:17:50 GMT-04:00 2019
[19-09-20 15:40:54:018 EDT] rowTS
[19-09-20 15:40:54:018 EDT] 1.56900347E12
[19-09-20 15:40:54:019 EDT] oneHouragoTS
[19-09-20 15:40:54:019 EDT] 1.569004854016E12
[19-09-20 15:40:54:020 EDT] diff
[19-09-20 15:40:54:020 EDT] -1384016.0
[19-09-20 15:40:54:020 EDT] Fri Sep 20 12:18:00 GMT-04:00 2019
[19-09-20 15:40:54:021 EDT] rowTS
[19-09-20 15:40:54:021 EDT] 1.56899628E12
我在创建行之后的30-40分钟内运行此程序,因此我假设diff将为正数,并且返回该行,但是diff为负数,并且过滤在1小时内创建的行将返回一个空数组
我该如何解决?
答案 0 :(得分:2)
工作表中的日期为2019年9月20日星期五14:17:50 GMT-04:00
它可以由new Date("Fri Sep 20 14:17:50 GMT-04:00 2019")
console.log(new Date("Fri Sep 20 14:17:50 GMT-04:00 2019"))
您对一个小时前的计算也是正确的:
var oneHourAgo = Date.now() - (60*60*1000); // shorter version
console.log(oneHourAgo, new Date(oneHourAgo));
但是,它在创建后的30-40分钟内没有运行。 您将在1小时24分钟后运行它:美国东部时间19-09-20 15:40:54:016。
因此,您会得到负值,因为它们早于一小时。
我可以建议您对过滤器进行优化吗?
var now = Date.now();
var pendingRows = descending.filter(function (row) {
var rowTS = Date.parse(row['Timestamp']);
var diff = now - rowTS;
Logger.log(row['Timestamp'], rowTS, diff);
return diff < (60*60*1000);
});