Сначала вам нужно выяснить, какой день является последним днем. Если вы можете предположить, что записи уже отсортированы, то это довольно просто:
// Assuming your records are stored in the variable "records"
var lastDay = records[records.length - 1].created;
Теперь вот где ваш конкретный ответ может отличаться в зависимости от того, как вы хотитеобрабатывать часовые пояса. Предположим, что одно событие произошло в 23:00 по восточному поясному времени (3 часа по Гринвичу), а другое - в 1 час по восточному времени (5 часов утра по Гринвичу)Это один и тот же день? В Европе они есть, а в Америке - нет!
Что вам нужно сделать, так это создать какой-нибудь шифр из даты и времени, указанных в «дне». Таким образом, вы можете сравнить два «дня», чтобы увидеть, совпадают ли они:
lastDay = new Date(lastDay);
// Setting hours, minutes, and seconds to 0 will give you just the "day" without the time, but by default will use the system timezone
lastDay.setHours(0);
lastDay.setMinutes(0);
lastDay.setSeconds(0);
Когда вы знаете, какой день был последним, это простой фильтр:
// Using a for loop
var results = []
for (var i = 0; i < records.length; i++)
{
if (records[i].created > lastDay) {
results.push(records[i]);
}
}
// Using .filter
var results = records.filter(x => x.created > lastDay);
В качестве альтернативы, поскольку мы знаем, что она уже отсортирована, мы можем сделать это немного более эффективно, выполнив двоичный поиск первой записи в последний день, а затем собрав все записи после этого:
var test = records.length / 2;
var step = records.length / 4;
var found = false;
while (!found) {
if (records[test].created < lastDay) {
test += step;
step /= 2;
}
else if (records[test].created > lastDay) {
if (step == 1) {
// We found the exact cut-off
found = true;
}
else {
test -= step;
step /= 2;
}
}
}
var results = records.slice(test);
Поскольку вы толькоинтересует «последний» день, логика немного проще. Если вы хотите «третий» день, вам нужно проверить, было ли created
после начала третьего дня и до конца третьего дня. Мы можем просто проверить, наступило ли это после начала последнего дня.