Преобразование JavaScript FILETIME - один выходной

Я читал о JavaScript "off-by-one" для дат, но я не могу понять, как реализовать его в этой ситуации. Я конвертирую некоторые значения из файла cookie Internet Explorer в Microsoft FILETIME, но он всегда впереди на один день, код выглядит так:

function ConvertToFiletime(high, low) {
    var seconds = 1e-7 * (high * Math.pow(2, 32) + low) - 11644473600;
    var date = new Date.UTC(1970,1,1);
    date.setSeconds(date.getSeconds() + seconds);
    return date;
}

Это делает преобразование на отлично, но я не могу найти лучший способ справиться с дополнительным днем, который, я считаю, связан с отсутствием часового пояса. Нужно ли вычитать дневную ценность секунд? Или есть лучший способ.

1 ответ

Решение

Ваша ошибка в этой строке:

var date = new Date.UTC(1970,1,1);

Date.UTC(1970, 1, 1) на самом деле 1 февраля, потому что индексирование месяца начинается с 0. Скорее всего, вы хотите Date.UTC(1970, 0, 1) который 1 января.

Также, new Date.UTC() выдает ошибку для меня в последней версии Chrome и IE 11. Чтобы правильно создать объект даты, используйте:

new Date(Date.UTC(1970, 0, 1))
Другие вопросы по тегам