Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Таймер срабатывает раньше времени или вообще не срабатывает (https://javascript.ru/forum/dom-window/70008-tajjmer-srabatyvaet-ranshe-vremeni-ili-voobshhe-ne-srabatyvaet.html)

Terebonko 03.08.2017 03:52

Таймер срабатывает раньше времени или вообще не срабатывает
 
Помогите, пожалуйста, разобраться, что нетак с таймером.

Браузер Chrome
При создании записи, создаётся заметка со следующими свойствами:

- номер заметки isbn
- статус заметки
- дата
- время

Вычесляется время в миллисекундах и передаётся таймеру setTimeout, по истечении времени изменяется статус заметки с Inprocess на Failed.

Не могу понять, почему для некоторых дат, таймер срабатывает сразу или не срабатывает вообще. Например, если срок равен 30 августа, то таймер сработает сразу, а не 30 августа, от настоящего времени. Так же он не срабатывает если задать прошедшую дату, например 1 июля, статус заметки будет в процессе, а не failed. Здесь пример кода https://repl.it/Jt3i/4

Terebonko 03.08.2017 07:13

Может я запутанно написал, можете уточнить у меня.

Nexus 03.08.2017 09:33

В примере кода без ящика не разберешься...
Лучше приведите пример кода с setTimeout.

Dilettante_Pro 03.08.2017 10:24

Terebonko,
Не вполне понятно, зачем эти навороты с датами:
var deadLineForCreate = {
	         "date": {
    					"years": years,
    					"months": months,
    					"days": days
	         },
  				 "time": {
  					  "hours": hours,
  					  "minutes": minutes,
  				 },
			     "deadlineInMilleseconds": 0

	  };

У обычной переменной типа Date есть все, что нужно...

Terebonko 03.08.2017 11:06

Спасибо ребята за замечания. Я решил проблему. Моя дата конвертированная в миллисекунды привышала лимит метода setTimeout, поэтому он срабатывал сразу после вызова.

Dilettante_Pro 03.08.2017 11:25

Terebonko,
А какой смысл на клиенте запускать setTimeout на такой длительный срок? Что, пользователь откроет вашу страницу и будет сидеть и ждать конца августа?

Terebonko 03.08.2017 12:43

Конечно нет.

Пользователь создаёт заметку в которой есть дата, время и статус(в процессе или провалено). Дата и время конвертируются в миллисекунды и сохраняются в локальном хранилище браузера. Каждый раз, когда пользователь загружает приложение, от миллисекунд, хранящихся локальном хралище, вычитаются миллисекунды текущей даты и времени. Разность передаётся таймеру.


Часовой пояс GMT +3, время: 05:48.