过滤具有2天之前的时间戳记的对象

时间:2019-03-19 16:40:49

标签: javascript google-apps-script

我正在使用应用脚本。我有一系列对象,这些对象的date_time属性为时间戳。我只想选择在2天前加上时间戳的所有对象(我不希望1天或3天前)。

作为一个例子,假设今天是2019/3/19。 2天前是3/17/2019。我想要所有包含3/17/2019的时间戳记

我正在阅读https://www.digitalocean.com/community/tutorials/understanding-date-and-time-in-javascript

假设我有:

objs = [{'name':'tom','timestamp':'3/18/2019 11:42:23'},
{'name':'bob','timestamp':'3/19/2019 11:42:23'}, {'name':'dave','timestamp':'3/20/2019 11:42:23'}

]

我可以使用2天前的日期:

var d = new Date();
var 2daysago = d.setDate(d.getDate() - daysAgo);

然后我可以过滤:

var filtered = objs .filter(function (obj) {
return X
});  

比较每个对象2daysago时间戳的最佳方法是什么?使用日期对象或使用某种字符串方法会更好吗?

enter image description here

2 个答案:

答案 0 :(得分:1)

  • 首先,从电子表格中检索所有值并将其放入objs。
  • 您想使用Google Apps脚本从objs检索所需的值。
    • 在图像的情况下,当今天是3/17/2019 10:11:47时,它们是3/17/2019 10:11:493/19/2019的对象。

如果我的理解正确,那么这个答案如何?在此答案中,我针对您的情况提出了两种模式。

模式1:

在此模式中,timestamp用作字符串。今天是3/19/2019时,将检索3/17/2019处包括timestamp的值作为2天前的值。

var nDaysAgo = 2; // 2 days ago
var date = new Date();
date.setDate(date.getDate() - nDaysAgo);
//  var checkDate = Utilities.formatDate(d, Session.getScriptTimeZone(), "M/dd/yyyy"); // If the day is 01,02,,, please use this.
var checkDate = Utilities.formatDate(date, Session.getScriptTimeZone(), "M/d/yyyy"); // If the day is 1,2,,, please use this.
var res = objs.filter(function(e) {return e.timestamp.indexOf(checkDate) > -1});
Logger.log(res)

模式2:

在此模式下,timestamp用作日期对象。今天是3/19/2019时,将从3/17/2019 00:00:003/18/2019 00:00:00的值在2天前检索。

var nDaysAgo = 2; // 2 days ago
var d1 = new Date();
d1.setHours(0, 0, 0, 0);
var d1c = d1.setDate(d1.getDate() - nDaysAgo + 1);
var d2 = new Date();
d2.setHours(0, 0, 0, 0);
var d2c = d2.setDate(d2.getDate() - nDaysAgo);
var res = objs.filter(function(e) {
  var temp = new Date(e.timestamp).getTime();
  return temp < d1c && temp > d2c;
});
Logger.log(res)

注意:

  • 如果要测试为3/19/2019,请使用new Date("3/19/2019 00:00:00")而不是new Date()

参考:

如果我误解了您的问题,而这不是您想要的结果,我深表歉意。

答案 1 :(得分:0)

const day = 24 * 60 * 60 * 1000;
const oneDayAgo = Date.now() - day;
const twoDaysAgo = Date.now() - 2 * day;

const isTwoDaysOld = function(obj) {
    const d = new Date(obj.timestamp);
    return d > twoDaysAgo && d < oneDayAgo;
}

const filtered = objs.filter(isTwoDaysOld);

在JS中,Date转换为 ms 以进行诸如+-><等数字运算。

然后我们要做的就是找出2天前的时间点(以 ms 为单位)和1天前的时间点。然后检查日期是否在中间。

注意:这是假设您用“天”表示“ 24小时”,而不是“日期中的天部分”