Таймер срабатывает раньше времени или вообще не срабатывает
Помогите, пожалуйста, разобраться, что нетак с таймером.
Браузер Chrome При создании записи, создаётся заметка со следующими свойствами: - номер заметки isbn - статус заметки - дата - время Вычесляется время в миллисекундах и передаётся таймеру setTimeout, по истечении времени изменяется статус заметки с Inprocess на Failed. Не могу понять, почему для некоторых дат, таймер срабатывает сразу или не срабатывает вообще. Например, если срок равен 30 августа, то таймер сработает сразу, а не 30 августа, от настоящего времени. Так же он не срабатывает если задать прошедшую дату, например 1 июля, статус заметки будет в процессе, а не failed. Здесь пример кода https://repl.it/Jt3i/4 |
Может я запутанно написал, можете уточнить у меня.
|
В примере кода без ящика не разберешься...
Лучше приведите пример кода с setTimeout. |
Terebonko,
Не вполне понятно, зачем эти навороты с датами: var deadLineForCreate = { "date": { "years": years, "months": months, "days": days }, "time": { "hours": hours, "minutes": minutes, }, "deadlineInMilleseconds": 0 }; У обычной переменной типа Date есть все, что нужно... |
Спасибо ребята за замечания. Я решил проблему. Моя дата конвертированная в миллисекунды привышала лимит метода setTimeout, поэтому он срабатывал сразу после вызова.
|
Terebonko,
А какой смысл на клиенте запускать setTimeout на такой длительный срок? Что, пользователь откроет вашу страницу и будет сидеть и ждать конца августа? |
Конечно нет.
Пользователь создаёт заметку в которой есть дата, время и статус(в процессе или провалено). Дата и время конвертируются в миллисекунды и сохраняются в локальном хранилище браузера. Каждый раз, когда пользователь загружает приложение, от миллисекунд, хранящихся локальном хралище, вычитаются миллисекунды текущей даты и времени. Разность передаётся таймеру. |
Часовой пояс GMT +3, время: 14:54. |