У меня такая ситуация:
У меня есть определенная функция, которая запускает цикл и выполняет какие-то действия, и при возникновении ошибки она может выйти из этого цикла. Я хочу иметь возможность проверить, работает ли цикл по-прежнему или нет.
Для этого я делаю для каждого запуска цикла:
LastTimeIDidTheLoop = new Date();
А в другой функции, которая проходит через SetInterval каждые 30 секунд, я хочу сделать в основном следующее:
if (LastTimeIDidTheLoop is more than 30 seconds ago) {
alert("oops");
}
Как мне это сделать?
Спасибо!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


как насчет:
newDate = new Date()
newDate.setSeconds(newDate.getSeconds()-30);
if (newDate > LastTimeIDidTheLoop) {
alert("oops");
}
Да, ты прав! Я исправил это, добавив исправленную версию.
Создайте объект даты и используйте setSeconds ().
controlDate = new Date();
controlDate.setSeconds(controlDate.getSeconds() + 30);
if (LastTimeIDidTheLoop > controlDate) {
...
Это не работает, он просто устанавливает время на 30 секунд, например «1:15:30». Вы хотите добавить 30 секунд, вы делаете controlDate.setSeconds (controlDate.getSeconds () + 30);
Объекты даты JS хранят миллисекунды внутри себя, вычитание их друг из друга работает должным образом:
var diffSeconds = (new Date() - LastTimeIDidTheLoop) / 1000;
if (diffSeconds > 30)
{
// ...
}
Сделать можно так:
var dateDiff = function(fromdate, todate) {
var diff = todate - fromdate;
return Math.floor(diff/1000);
}
тогда:
if (dateDiff(fromdate, todate) > 30){
alert("oops");
}
Это просто объединяет 30 в конец, например "Sun 07 Dec 2008 16:45:19 GMT-0500 (EST) 30"