Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
doc:1605:643.mgul.21010-10_13_01 [2024/01/04 14:52] aminaraon [requestAdditionalDataIfMissing(formattedStartDate, formattedEndDate, filteredKeys)] |
doc:1605:643.mgul.21010-10_13_01 [2024/01/04 15:05] (текущий) aminaraon [checkDateRangeInRedis(formattedStartDate, formattedEndDate, keysArray)] |
||
---|---|---|---|
Строка 59: | Строка 59: | ||
Шаг №2: Задаем максимальную разницу по времени между записями в секундах | Шаг №2: Задаем максимальную разницу по времени между записями в секундах | ||
const secondsThreshold = 360; | const secondsThreshold = 360; | ||
- | Шаг №3: Проверяем и добавляем данных, если разница между первым ключом в Redis и начальной датой больше secondsThreshold | + | Шаг №3: Проверяем и добавляем данные, если разница между первым ключом в Redis и начальной датой больше secondsThreshold |
const firstKey = filteredKeys[0]; | const firstKey = filteredKeys[0]; | ||
const formattedFirstKey = moment(firstKey).format(DATE_FORMAT); | const formattedFirstKey = moment(firstKey).format(DATE_FORMAT); | ||
Строка 81: | Строка 81: | ||
} | } | ||
} | } | ||
- | Шаг №5: Проверяем и добавляем данных, если разница между последним ключом в Redis и конечной датой больше secondsThreshold | + | Шаг №5: Проверяем и добавляем данные, если разница между последним ключом в Redis и конечной датой больше secondsThreshold |
const lastKey = filteredKeys[filteredKeys.length - 1]; | const lastKey = filteredKeys[filteredKeys.length - 1]; | ||
const formattedLastKey = moment(lastKey).format(DATE_FORMAT); | const formattedLastKey = moment(lastKey).format(DATE_FORMAT); | ||
Строка 90: | Строка 90: | ||
await updateDataInRedis(dataUrl); | await updateDataInRedis(dataUrl); | ||
} | } | ||
- | Шаг №6: Если флаг установлен в true, возвращение новых отсортированных и отфильтрованных ключей, иначе возвращаем filteredKeys | + | Шаг №6: Если флаг установлен в true, возвращение новых отсортированных и отфильтрованных ключей из Redis, иначе возвращаем filteredKeys |
return flag ? await sortedAndFilteredKeys(formattedStartDate, formattedEndDate) : filteredKeys; | return flag ? await sortedAndFilteredKeys(formattedStartDate, formattedEndDate) : filteredKeys; | ||
+ | ===== checkDateRangeInRedis(formattedStartDate, formattedEndDate, keysArray) ===== | ||
+ | Шаг №1: Инициализация переменных, получение начальной и конечной временных меток из Redis | ||
+ | const startDate = keysArray[0]; | ||
+ | const endDate = keysArray[keysArray.length - 1]; | ||
+ | Шаг №2: Расчет временной разницы в минутах между конечной датой Redis и заданной начальной датой. | ||
+ | let startDifference = moment(endDate).diff(moment(formattedStartDate), 'minutes'); | ||
+ | Шаг №3: Проверка, находится ли заданная начальная дата внутри или частично пересекается с временным диапазоном Redis. | ||
+ | if (startDate <= formattedStartDate && formattedStartDate < endDate && Math.abs(startDifference) >= 5) { | ||
+ | // Если условие выполняется, возвращаем true, указывая на пересечение временных диапазонов. | ||
+ | return true; | ||
+ | } | ||
+ | Шаг №4: Расчет временной разницы в минутах между заданной конечной датой массива и начальной датой Redis. | ||
+ | let endDifference = moment(formattedEndDate).diff(moment(startDate), 'minutes'); | ||
+ | Шаг №5: Если ни одно из условий не выполнилось, возвращаем false, указывая на отсутствие пересечения временных диапазонов, иначе true | ||
+ | return formattedStartDate <= startDate && startDate < formattedEndDate && Math.abs(endDifference) >= 5; |