Обнаружение изменений в системном времени в JavaScript

Как я могу записать сценарий для обнаружения, когда пользователь изменяет их системное время в JS?

9
задан Andy E 29 July 2010 в 11:37
поделиться

6 ответов

Нет (переносимого) способа отслеживать переменную в JavaScript. Кроме того, информация о дате не содержится в DOM, поэтому вы не получаете возможность запуска события DOM.

Лучшее, что вы можете сделать, - это использовать setInterval для периодической проверки (каждую секунду?). Пример :

function timeChanged(delta) {
  // Whatever
}

setInterval(function timeChecker() {
  var oldTime = timeChecker.oldTime || new Date(),
      newTime = new Date(),
      timeDiff = newTime - oldTime;

  timeChecker.oldTime = newTime;

  if (Math.abs(timeDiff) >= 5000) { // Five second leniency
    timeChanged(timeDiff);
  }
}, 500);
9
ответ дан 3 November 2019 в 00:57
поделиться

Вы можете проверять каждые 30 секунд и т. Д. Если новое время отключено более чем на 30 секунд +/- некоторый порог, вы можете провести более исчерпывающее сравнение, чтобы определить, насколько он был изменен.

0
ответ дан 3 November 2019 в 00:57
поделиться

Вы имеете в виду, что они меняют свое системное время на что-то неправильное? Вы можете спросить пользователя об их часовом поясе и получить правильное время с сервера, а затем сравнить его с системным временем пользователя.

0
ответ дан 3 November 2019 в 00:57
поделиться
var last_time = new Date().getTime();
setInterval(function() {
    var time = new Date().getTime();
    var offset = time - last_time;
    if(offset < 0 || offset > 1500) {
        // Time has been changed
    }
    last_time = time;
}, 1000);

Теоретически это должно сработать. Он будет проверять каждую секунду, чтобы убедиться, что время не было изменено. Обратите внимание, что я использую 1100 миллисекунд, поскольку большинство интерпретаторов JS не запускают события точно в указанное время.

Надеюсь, это поможет!

1
ответ дан 3 November 2019 в 00:57
поделиться

Проверьте функцию интервала, чтобы время не изменилось слишком сильно:

function getTime()  {
  var d = new Date();
  return d.getTime();
}

function checkTime()  {
  if (Math.abs(getTime() - oldtime) > 2000)  {  // Changed by more than 2 seconds?
    alert("You changed the time!");
  }
  oldtime = getTime();
}

var oldtime = getTime();
setInterval(checkTime, 1000);  // Check every second that the time is not off

Протестировано в Windows с Opera и FF и работает безупречно.

1
ответ дан 3 November 2019 в 00:57
поделиться

Не думаю, что есть решение того, о чем вы просите, но вы можете получить смещение часового пояса пользователя.

new Date().getTimezoneOffset() * -1

Возвращает смещение в минутах от GMT. Не забывайте, что при этом не учитывается летнее время.

0
ответ дан 3 November 2019 в 00:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: