2016-09-06 3 views
0

Здесь вы можете выбрать дату, и она сообщит вам, как долго до этой даты. Но если я выбираю новую дату, все становится плохо ... Что мне нужно сделать, чтобы перезапустить функцию и setInterval после того, как будет добавлено новое значение даты?Как остановить и перезапустить setInterval, когда выбрана новая дата

$(document).ready(function() { 
 

 
    var showOne = new Date(); 
 
    var showTwo = new Date(2016, 10, 14); 
 
    $('#showOne').text(showOne); 
 
    $('#showTwo').text(showTwo); 
 

 
    function calcDate(newDater) { 
 

 
    var tickTock = setInterval(function() { 
 
     var currentDateSec = $.now()/1000; 
 
     var laterDate = newDater; 
 
     // console.log("Later Date: " + laterDate); 
 
     var laterDateSec = laterDate/1000; 
 
     var timeLeft = laterDateSec - currentDateSec; 
 

 
     var sLeft = Math.floor(timeLeft) % 60; 
 
     var mLeft = Math.floor(timeLeft/(60)) % 60; 
 
     var hLeft = Math.floor(timeLeft/(60 * 60)) % 24; 
 
     var dLeft = Math.floor(timeLeft/(60 * 60 * 24)) % 7; 
 
     var wLeft = Math.floor(timeLeft/(60 * 60 * 24 * 7)) % 4; 
 
     var moLeft = Math.floor(timeLeft/(60 * 60 * 24 * 7 * 4)); 
 

 

 
     $('#humandate').text(moLeft + " Month(s) - " + wLeft + " Week(s) - " + dLeft + " Day(s) - " + hLeft + " Hour(s) - " + mLeft + " Mins - " + sLeft + " Sec\(s\)"); 
 

 

 
    }, 1000); 
 

 
    } 
 

 

 
    $("#datepicker").datepicker({ 
 
    onSelect: function(dateText, inst) { 
 

 
     var dateAsString = dateText; //the first parameter of this function 
 
     var dateAsObject = $(this).datepicker('getDate'); //the getDate method 
 
     var date = $("#datepicker").datepicker({ 
 
     dateFormat: 'dd,MM,yyyy' 
 
     }).val(); 
 
     console.log(dateAsString + " --- " + dateAsObject + " --- " + date); 
 
     calcDate(dateAsObject); 
 
    } 
 
    }); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js "></script> 
 

 
<p>Date: 
 
    <input type="text" id="datepicker"> 
 
</p> 
 

 
<span id="humandate"></span> 
 
<br/>

+0

Возможная Дубликат [Сброс Таймер setInterval() ] (http://stackoverflow.com/questions/18270009/reset-timer-of-setinter val) –

ответ

0

Вы можете сбросить его, делая clearInterval(id) как:

... 

var tickTock; 

function calcDate(newDater) { 
    // if you have set it before, clear it. 
    if (tickTock) { 
     clearInterval(tickTock); 
    } 
    tickTock = setInterval(function() { 
    .... 
+0

Мне не повезло с этим, если только я все еще не хватает чего-то –

0

Сортировано его:

... 

function calcDate(newDater) { 

    $("#datepicker").on('blur' , function(){ clearInterval(tickTock); }); 

    var tickTock = setInterval(function() { 

... 
Смежные вопросы