Сейчас я работаю над напоминанием о перерыве. Пользователи смогут установить время начала и окончания, которое я буду сравнивать с текущим временем, чтобы определить, когда запускать уведомление о перерыве.
const currentDate = new Date();
let startTime = "09:00:00";
let endTime = "17:00:00";
const startTimeSplit = startTime.split(":");
const endTimeSplit = endTime.split(":");
const startDate = new Date();
startDate.setHours(parseInt(startTimeSplit[0], 10));
startDate.setMinutes(parseInt(startTimeSplit[1], 10));
startDate.setSeconds(0);
const endDate = new Date();
endDate.setDate(startDate.getDate() + 1)
endDate.setHours(parseInt(endTimeSplit[0], 10));
endDate.setMinutes(parseInt(endTimeSplit[1], 10));
endDate.setSeconds(0);
if (startDate <= currentDate && endDate > currentDate && this.checkNonBreakTime()) {
const timeDelta = (currentDate.getTime() - startDate.getTime()) / 60000;
if (timeDelta % frequency === 0) {
this.createNotification();
}
}
Переменные времени начала и окончания берутся из базы данных в зависимости от предпочтений агентов.
Проблема здесь в том, что если время окончания потенциально наступает на следующий день, мой код ломается.
Кто-нибудь раньше создавал подобное приложение для напоминаний и есть идея, как я могу сравнить 3 даты?
Вы всегда можете проверить, наступает ли время окончания раньше времени начала, и предположить, что это означает, что это следующий день, а затем добавить день до даты окончания.
Совет: вы можете установить часы, минуты, секунды и миллисекунды за один раз, и вам не нужно использовать parseInt. Например. startDate.setHours(startTimeSplit[0], startTimeSplit[1], 0, 0)
. :-) Также рассмотрите let [h,m,s] = startTime.split(":")
@ y2bd код прерывается, когда currentDate переключается на следующий день. startDate = new Date () также будет переключаться, поскольку я заменяю только значения времени временем из базы данных
@Phil, который работает до тех пор, пока currentDate не переключится на следующий день. Добавление дня приведет к тому, что endDate будет на целый день раньше currentDate.
@RobG понял. Спасибо!
Привет, добро пожаловать в Stack Overflow! Почему ваш код ломается, если время окончания наступает на следующий день? Можете ли вы добавить пример входных данных, которые ломают ваш код, и конкретно указать, что ломается?