我正在使用应用脚本。我有一系列对象,这些对象的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时间戳的最佳方法是什么?使用日期对象或使用某种字符串方法会更好吗?
答案 0 :(得分:1)
3/17/2019 10:11:47
时,它们是3/17/2019 10:11:49
,3/19/2019
的对象。如果我的理解正确,那么这个答案如何?在此答案中,我针对您的情况提出了两种模式。
在此模式中,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)
在此模式下,timestamp
用作日期对象。今天是3/19/2019
时,将从3/17/2019 00:00:00
到3/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小时”,而不是“日期中的天部分”