#javascript #arrays #date
#javascript #массивы #Дата
Вопрос:
Пожалуйста, поправьте меня, если этот вопрос уже задавался в Stack, но я не нашел ответа, который решил бы мою проблему. Я хочу отображать только объект моего массива, где диапазон дат, состоящий из timeStart
и timeEnd
, соответствует текущему времени. Допустим, текущее время будет 2020-10-22T16:35:45 01:00
, функция должна отображать назначение Стива (см. Пример, приведенный Ниже). Как я могу выполнить поиск объекта, в котором текущее время находится между заданными диапазонами дат?
const currentTime = Date.now(); // 2020-10-22T16:35:45 01:00
Это массив, с которым я работаю:
[
{
name: "Thomas",
timeStart: "2020-10-22T16:00:00 0100",
timeEnd: "2020-10-22T16:15:00 01:00"
},
{
name: "Marc",
timeStart: "2020-10-22T16:15:00 0100",
timeEnd: "2020-10-22T16:30:00 01:00"
},
{
name: "Steve",
timeStart: "2020-10-22T16:30:00 0100",
timeEnd: "2020-10-22T16:45:00 01:00"
}
]
Ответ №1:
Сравните начальную, конечную и текущую даты внутри find
цикла.
Если сравнение возвращает true, то будет возвращен текущий объект, в противном undefined
случае.
const now = new Date("2020-10-22T16:17:00 01:00"); // 16:17. Should be Marc.
const dates = [
{
name: "Thomas",
timeStart: "2020-10-22T16:00:00 0100",
timeEnd: "2020-10-22T16:15:00 01:00"
},
{
name: "Marc",
timeStart: "2020-10-22T16:15:00 0100",
timeEnd: "2020-10-22T16:30:00 01:00"
},
{
name: "Steve",
timeStart: "2020-10-22T16:30:00 0100",
timeEnd: "2020-10-22T16:45:00 01:00"
}
];
const result = dates.find(({ timeStart, timeEnd }) => {
const start = new Date(timeStart);
const end = new Date(timeEnd);
return start <= now amp;amp; end > now;
});
console.log(result);
Ответ №2:
Это работает для вас? Он выполняет поиск по каждой дате и проверяет, что текущая дата находится между началом и концом.
const currentTime = Date.now(); // 2020-10-22T16:35:45 01:00
const dates = [{
name: "Thomas",
timeStart: "2020-10-22T16:00:00 0100",
timeEnd: "2020-10-22T16:15:00 01:00"
},
{
name: "Marc",
timeStart: "2020-10-22T16:15:00 0100",
timeEnd: "2020-10-22T16:30:00 01:00"
},
{
name: "Steve",
timeStart: "2020-10-22T16:30:00 0100",
timeEnd: "2020-10-22T16:45:00 01:00"
}
];
// If you want only one result, use find instead of filter
const validDates = dates.filter((obj) => {
// Converts strings to Dates
let startDate = new Date(obj.timeStart);
let endDate = new Date(obj.timeEnd);
// Makes sure the current time is after the start date and before the end date
return currentTime >= startDate amp;amp; currentTime <= endDate;
});
console.log(validDates);
// To get name, use validDates[0].name (for filter, see above) or validDates.name (for find)
Ответ №3:
Это будет что-то вроде этого:
const currentTime = Date.now();
const resultArray=yourArray.filter(item=>{
// you have to format dates to be able to compare them
return item.timeStart < currentTime amp;amp; item.timeEnd > currentTime
});
Ответ №4:
Попробуйте что-то вроде этого YourArray.filter(item => currentTime >= item.TimeStart amp;amp; currenttime <= timeEnd)