Вы должны сохранить ссылку на setInterval
, если хотите очистить ее.
var timer = setInterval(...)
Я бы также предложил поместить логику этого в отдельную функцию для вызова при необходимости и кэшировать вашиJQuery селекторы.Это дополнительная работа, проверяющая часовой пояс на каждой итерации таймера (я сомневаюсь, что клиент часто меняет часовые пояса, если вообще когда-либо), и увеличение задержки, чтобы соответствовать точности вашего дисплея (в этом случае вы показываете точность до секунд, но вы вызываетеинтервал 10 раз в секунду, что означает, что 9 из 10 вызовов являются излишними)
// cache timezone
var zone = {
'Eastern': 'America/New York',
'Central': 'America/Mexico_City',
'Mountain': 'America/Denver',
'Pacific': 'America/Los_Angeles',
'Arizona': 'America/Phoenix'
}[data.Timezone];
// cache DOM element to update
var $time = $('#general_current-time');
function updateTime() {
$time.text(moment().tz(zone).format('hh:mm:ss a'));
}
// store a reference to the timer. Also, since the format precision is
// seconds, only run this every ~1000ms
var interval = setInterval(updateTime, 1000);
Обратите внимание, что updateTime
нечисто, поскольку использует zone
и $time
из родительской области видимости., поэтому, безусловно, есть некоторые улучшения, которые можно внести в эту функцию.
Это позволит вам остановить таймер и начать новый:
// stop the interval using the timer reference
clearInterval(interval);
var newInterval = setInterval(updateTime, 1000);
Полная программа (из codepen)
$(document).ready(function() {
let interval;
$("#la").click(function() {
clear(interval);
interval = setInterval(function() {
$("#time").text(
moment()
.tz("America/Los_Angeles")
.format("hh:mm:ss a")
);
});
});
$('#east').click(function() {
clear(interval);
interval = setInterval(function() {
$('#time').text(moment().tz('America/New_York').format('hh:mm:ss a'));
});
});
$('#clear').click(function() {
clearInterval(interval);
});
});
function clear(interval) {
clearInterval(interval);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.js" type="text/javascript"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data.min.js" type="text/javascript"></script>
<p id="time">00:00</p>
<button id="la">Arizona</button>
<button id="east">East</button>
<button id="clear">Clear</button>