Обнаружение изменений системного времени в JavaScript - PullRequest
9 голосов
/ 30 июля 2010

Как мне написать скрипт для определения, когда пользователь меняет свое системное время в JS?

Ответы [ 6 ]

8 голосов
/ 30 июля 2010

Нет (переносимого) способа отследить переменную в 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);
1 голос
/ 30 июля 2010
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 голос
/ 30 июля 2010

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

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 и работает безупречно.

0 голосов
/ 30 июля 2010

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

0 голосов
/ 30 июля 2010

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

new Date().getTimezoneOffset() * -1

Возвращает смещение в минутах от GMT.Имейте в виду, что это не учитывает ТЛЧ.

0 голосов
/ 30 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...