将日期字符串正确解析为时间戳?

时间:2019-09-20 20:10:39

标签: javascript date datetime google-apps-script

enter image description here

我正在使用应用程序脚本。

我正在将工作表行解析为对象,并试图按时间对其进行过滤,以获取最近一小时的最新条目

[{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小时内创建的行将返回一个空数组

我该如何解决?

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); 
});