Перезапуск функции на js

402
30 мая 2017, 02:26

Здравствуйте. Решил поразвлечься изучая JS и пришел в тупик. Написал такой код

function daaays () { 
    today = new Date(); 
BigDay = new Date("May 29, 2017 09:00:00") 
msPerDay = 24 * 60 * 60 * 1000 ; 
timeLeft = (BigDay.getTime() - today.getTime()); 
e_daysLeft = timeLeft / msPerDay; 
daysLeft = Math.floor(e_daysLeft); 
e_hrsLeft = (e_daysLeft - daysLeft)*24; 
hrsLeft = Math.floor(e_hrsLeft); 
minsLeft = Math.floor((e_hrsLeft - hrsLeft)*60); 
 
vk.addListener.messages(function(msg) { 
    if(msg.body == "!exam")msg.send("До русского языка осталось:\n"  + daysLeft + " дней\n" + hrsLeft + " часов\n" + minsLeft + " минут\n" + "Времени мало, но вы там держитесь :3"); 
    if(msg.body == "!Экзамен")msg.send("До русского языка осталось:\n"  + daysLeft + " дней\n" + hrsLeft + " часов\n" + minsLeft + " минут\n" + "Времени мало, но вы там держитесь :3"); 
    if(msg.body == "!экзамен")msg.send("До русского языка осталось:\n"  + daysLeft + " дней\n" + hrsLeft + " часов\n" + minsLeft + " минут\n" + "Времени мало, но вы там держитесь :3"); 
     if(msg.body == "!время")msg.send("До русского языка осталось:\n"  + daysLeft + " дней\n" + hrsLeft + " часов\n" + minsLeft + " минут\n" + "Времени мало, но вы там держитесь :3"); 
      
}); } 
setInterval(daaays, 50000);

Он должен считать время до заданного события (тут это экзамен, допустим) и писать его в ЛС по команде. Но не совсем понимаю, как перезапустить функцию. В том виде, какой я представил выше, функции тупо плодятся по таймеру, и в ответ (после 100000мс) приходят 2+ ответа, что неправильно как то. Расскажите мне, пожалуйста, как переделать код так, чтобы время обновлялось, скажем, каждую минуту, но функции не плодились. Нужно либо делать именно перезапуск (а не запуск новой) функции, либо (как я думаю) производить вычисления в отдельной функции (и перезапускать ее), а значения переменных выносить из функции просто напросто в отдельную часть кода (не понимаю после C++ абсолютно, как это делать можно в JS). Заранее огромное спасибо!

UPD. Смог сам решить (мне так кажется) проблему. Переписал код вот так:

var daysLeft; 
var hrsLeft; 
var minsLeft; 
 
function daaays () { 
    today = new Date(); 
BigDay = new Date("May 29, 2017 09:00:00"); 
msPerDay = 24 * 60 * 60 * 1000 ; 
timeLeft = (BigDay.getTime() - today.getTime()); 
e_daysLeft = timeLeft / msPerDay; 
daysLeft = Math.floor(e_daysLeft); 
e_hrsLeft = (e_daysLeft - daysLeft)*24; 
hrsLeft = Math.floor(e_hrsLeft); 
minsLeft = Math.floor((e_hrsLeft - hrsLeft)*60); 
return(0); 
} 
setInterval(daaays, 100, daysLeft, hrsLeft, minsLeft); 
 
vk.addListener.messages(function(msg) { 
    if(msg.body == "!exam")msg.send("До русского языка осталось:\n"  + daysLeft + " дней\n" + hrsLeft + " часов\n" + minsLeft + " минут\n" + "Времени мало, но вы там держитесь :3"); 
    if(msg.body == "!Экзамен")msg.send("До русского языка осталось:\n"  + daysLeft + " дней\n" + hrsLeft + " часов\n" + minsLeft + " минут\n" + "Времени мало, но вы там держитесь :3"); 
    if(msg.body == "!экзамен")msg.send("До русского языка осталось:\n"  + daysLeft + " дней\n" + hrsLeft + " часов\n" + minsLeft + " минут\n" + "Времени мало, но вы там держитесь :3"); 
     if(msg.body == "!время")msg.send("До русского языка осталось:\n"  + daysLeft + " дней\n" + hrsLeft + " часов\n" + minsLeft + " минут\n" + "Времени мало, но вы там держитесь :3"); 
      
});

READ ALSO
Вызов функции посредством кнопки js

Вызов функции посредством кнопки js

Ребят, помогите с домашним заданием пожалуйстаКод почему не срабатывает

255
Плагин для javascript для sublime text 3

Плагин для javascript для sublime text 3

Добрый день! Подскажите, пожалуйста, плагин для автодополнения javascript, как в IDEЗдесь посоветовали плагин SublimeCodeIntel, я его установил, однако,...

270
Запись в объект data, vue.js

Запись в объект data, vue.js

Хочу реализовать подобие регистрации и авторизацииВо время сабмита регистрационной формы, собираю данные из ее полей и добавляю их в массив...

619