Циклическая функция часов с использованием setInterval - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь создать функцию, которая может возвращать значение (текущее время пользователя в секундах) другой переменной, которую можно использовать в другом месте моего кода. Функция возвращает правильное значение, но я не могу понять, как заставить его повторяться, используя setInterval или setTimeout.

var currenttime = clock();

function clock() {
    var now = new Date();
    var hour = now.getHours();
    var minute = now.getMinutes();
    var second = now.getSeconds();
    var time = (hour * 3600) + (minute * 60) + second;
    return time;
}

console.log(currenttime)

Я хочу, чтобы переменная currenttime обновлялась каждую секунду, но изменение строки на
var currenttime = setInterval(clock, 1000);
возвращает неверное значение. В качестве альтернативы я также попытался повторить функцию clock,
, но я не уверен, как это сделать, поскольку я использую оператор return, чтобы функция заканчивалась до того, как ее можно будет повторить.

Кто-нибудь знает, что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 06 апреля 2020

setInterval возвращает только значение ID, которое можно использовать в clearInterval(ID) для остановки setInterval l oop.

Итак, вы можете сделать это:

function clock()
  {
  let [h,m,s] = (new Date().toTimeString()).match(/\d{2}/g)
  return (h*3600) + (m*60) + +s
  }

var currenttime = clock();
setInterval(() => { currenttime = clock() }, 1000);
0 голосов
/ 06 апреля 2020

Функция, вызываемая setInterval, должна вызывать часы и отображать время.

setInterval(function(){ console.log(clock()); }, 1000);
0 голосов
/ 06 апреля 2020

Присваивать currentTime каждый раз при запуске clock, но не return time - поскольку это будет в интервале, возвращаемое значение игнорируется:

let currentTime;

function clock() {
    var now = new Date();
    var hour = now.getHours();
    var minute = now.getMinutes();
    var second = now.getSeconds();
    currentTime = (hour * 3600) + (minute * 60) + second;
}

setInterval(clock, 1000);

setTimeout(() => console.log(currentTime), 2000);
setTimeout(() => console.log(currentTime), 6000);

Хотя это немного странно - только присвоение переменной не имеет побочных эффектов (почти во всех случаях). Было бы разумнее, если бы использовал переменную currentTime для вызова clock для получения текущего количества секунд, например:

function clock() {
    var now = new Date();
    var hour = now.getHours();
    var minute = now.getMinutes();
    var second = now.getSeconds();
    return (hour * 3600) + (minute * 60) + second;
}

document.querySelector('button').addEventListener('click', () => {
  document.querySelector('div').textContent = clock();
});
<button>Get seconds</button>
<div id="time"></div>
...