Comments 4
Подход IE правильный, так как историчность смещения имеет значение.
Простите, но я не понимаю, что этот код вообще делает — такое ощущение, что он попросту недописан. Да и надеетесь на точность setInterval вы совершенно зря.
Правильный таймер должен работать как-то так, и
Вместо арифметики над
PS По поводу же вопроса, заданного в конце статьи — лично мне, как программисту на C#, поведение IE привычнее. Но по сути, правильным поведением обладают оба браузера. Просто замените
PPS Такое ощущение,. что вы не знаете про конструкцию
Правильный таймер должен работать как-то так, и
getTimezoneOffset
ему совершенно не нужен.var basetime = new Date("Tue Feb 11 2014 13:48:52 GMT+0600").getTime(); // Время, на которое настроен таймер
var INTERVAL = 1000*60;
timer();
function timer() {
var time = new Date().getTime() - basetime; // Переставить местами для обратного таймера.
if (time < 0) ; // Таймер еще не стартовал - или уже закончился. Этот случай надо обработать отдельно, в соответствии с логикой программы.
setTimeout(timer, INTERVAL - time % INTERVAL);
time /= INTERVAL;
$minutes.text(Math.floor(time));
time /= 60;
$hours.text(Math.floor(time));
time /= 24;
$days.text(Math.floor(time));
};
Вместо арифметики над
time
можно было бы использовать new Date(time)
и его методы getUTCXxx
, я лично не вижу в таком подходе каких-то особых преимуществ.PS По поводу же вопроса, заданного в конце статьи — лично мне, как программисту на C#, поведение IE привычнее. Но по сути, правильным поведением обладают оба браузера. Просто замените
getTimezoneOffset
на toString
и обратите внимание на последнюю часть даты. Если она соответствует результату getTimezoneOffset
— то все верно.PPS Такое ощущение,. что вы не знаете про конструкцию
new Date(0)
…UPD: Вариант для любителей сокращать число строк в программе:
var basetime = new Date("Tue Feb 11 2014 13:48:52 GMT+0600").getTime();
var INTERVAL = 1000*60;
timer();
function timer() {
var time = new Date().getTime() - basetime;
if (time < 0) ; // Таймер еще не стартовал - или уже закончился. Этот случай надо обработать отдельно, в соответствии с логикой программы.
setTimeout(timer, INTERVAL - time % INTERVAL);
$minutes.text(Math.floor(time /= INTERVAL));
$hours.text(Math.floor(time /= 60));
$days.text(Math.floor(time /= 24));
};
Полагаю, что здесь учитывается то, чем занимается Россия в последнее время — перевод стрелок.
Если у вас российская локаль, то скорее всего. И ИЕ ведёт себя правильно. Но вообще рассчитывать, что getTimezoneOffset() при двух последовательных вызовах в конструкциях типа new Date().getTimezoneOffset(); вернёт одно число нельзя вообще. Как минимум, между этими вызовами может произойти смена летнего времени на зимнее на компе пользователя, а то и смена часового пояса.
Sign up to leave a comment.
Date.prototype.getTimezoneOffset — различие возвращаемых значений в разных браузерах