Фильтровать объекты с меткой времени от 2 дней назад - PullRequest
1 голос
/ 19 марта 2019

Я работаю в скрипте приложений.У меня есть ряд объектов, которые имеют свойство date_time, которое является отметкой времени.Я хочу выбрать все объекты, которые были отмечены только 2 дня назад (я не хочу 1 день назад или три дня назад).

В качестве примера предположим, что сегодня 19.03.2009.2 дня назад 17.03.2009.Я хочу все отметки времени, которые включают 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'}

]

Iможно получить дату от 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 ]

1 голос
/ 20 марта 2019
  • Сначала все значения из электронной таблицы были извлечены и помещены в objs.
  • Вы хотите получить необходимые значения из objs с помощью Google Apps Script.
    • В случае изображения это объекты 3/17/2019 10:11:47, 3/17/2019 10:11:49, когда сегодняшний день равен 3/19/2019.

Если мойпонимание правильно, как насчет этого ответа?В этом ответе я предложил 2 шаблона для вашей ситуации.

Шаблон 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: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().

Ссылка:

Если я неправильно понял ваш вопрос, и это был не тот результат, которого вы хотите, прошу прощения.

0 голосов
/ 19 марта 2019
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 преобразуется в мс для числовых операций, таких как +, -, >, < и т. Д.

Тогда все, что нам нужно сделать, это определить момент времени (в мс ) 2 дня назад и момент времени 1 день назад. А затем проверьте, находится ли соответствующая дата между ними.

Примечание : подразумевается, что вы подразумеваете «24 часа» под «днем», а не «дневной частью даты»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...