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

问题描述 投票:1回答:3

我正在使用应用脚本。我有一系列具有date_time属性的对象,该属性是时间戳。我想选择2天前只有时间戳的所有对象(我不想要1天前或3天前)。

举个例子假设今天是2009年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

javascript google-apps-script
3个回答
1
投票
  • 首先,检索Spreadsheet中的所有值并将其放入objs。
  • 您想使用Google Apps脚本从objs中检索所需的值。 在图像的情况下,那些是3/17/2019 10:11:473/17/2019 10:11:49的对象,当今天是3/19/2019

如果我的理解是正确的,那么这个答案怎么样?在这个答案中,我为你的情况提出了两种模式。

Pattern 1:

在这种模式中,timestamp用作字符串。当今天是3/19/2019时,包括3/17/2019timestamp的值将被检索为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)

Pattern 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)

Note:

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

Reference:

如果我误解了你的问题并且这不是你想要的结果,我道歉。


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 qazxsw poi转换为ms进行数值运算,如qazxsw poi,Date+-等。

然后我们需要做的就是找出2天前的时间点(毫秒)和1天前的时间点。然后检查相关日期是否在中间。

注意:这假设你的意思是“24小时”到“天”,而不是“日期的一天”

© www.soinside.com 2019 - 2024. All rights reserved.