javascript новый Дата (0) класс показывает 16 часов? - PullRequest
4 голосов
/ 09 апреля 2010
interval = new Date(0);
return interval.getHours();

Выше приведено 16. Я ожидаю, что оно вернет 0. Любые указатели? getMinutes () и getSeconds () возвращают ноль, как и ожидалось. Спасибо!

Я пытаюсь сделать таймер:

function Timer(onUpdate) {
    this.initialTime = 0;
    this.timeStart = null;

    this.onUpdate = onUpdate

    this.getTotalTime = function() {
        timeEnd = new Date();
        diff = timeEnd.getTime() - this.timeStart.getTime();

        return diff + this.initialTime;
    };

    this.formatTime = function() {
        interval = new Date(this.getTotalTime());

        return this.zeroPad(interval.getHours(), 2) + ":" +  this.zeroPad(interval.getMinutes(),2) + ":" + this.zeroPad(interval.getSeconds(),2);
    };

    this.start = function() {
        this.timeStart = new Date();
        this.onUpdate(this.formatTime());
        var timerInstance = this;
        setTimeout(function() { timerInstance.updateTime(); }, 1000);
    };

    this.updateTime = function() {
        this.onUpdate(this.formatTime());
        var timerInstance = this;
        setTimeout(function() { timerInstance.updateTime(); }, 1000);
    };

    this.zeroPad = function(num,count) {
        var numZeropad = num + '';
        while(numZeropad.length < count) {
            numZeropad = "0" + numZeropad;
        }
        return numZeropad;
    }
}

Все работает нормально, за исключением 16-часовой разницы. Есть идеи?

1 Ответ

6 голосов
/ 09 апреля 2010

Если вы инициализируете Date с 0, он будет установлен в начале эпохи, 1 января 1970 г. 00:00:00 по Гринвичу. Часы, которые вы получаете, являются локализованным смещением времени.

Чтобы создать таймер, лучше начать с текущей метки времени, а потом вычислить разницу с ней. Помните, что временные метки - это абсолютные моменты времени, а не относительные.

var start = new Date();

// Time is ticking, ticking, ticking...

var end = new Date();

alert(end - start);

Или, более конкретно:

var start = new Date();

setTimeout(function () {
    var end = new Date();
    alert(end - start);
}, 2000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...