Firefox new Date () из строки строит время в местном часовом поясе - PullRequest
9 голосов
/ 30 января 2012

Я пытаюсь создать объект даты из строки. Я получаю дату в формате ISO, за исключением миллисекунд, например "2012-01-30T16: 23: 12"

Результаты отличаются, когда я запускаю следующий код в IE, Chrome и Firefox ( Ссылка на скрипку )

currentDate = "2012-01-30T16:23:12";
var date = new Date(currentDate);
alert(date);

IE и Chrome рассматривают строку как UTC, но Firefox считает в местном часовом поясе.

Есть ли какой-нибудь общий способ обойти это, кроме проверки пользовательского агента везде?

Ответы [ 3 ]

12 голосов
/ 30 января 2012

Вы можете попробовать добавить нулевое смещение часового пояса +00:00 для UTC:

currentDate = "2012-01-30T16:23:12+00:00";

Это помогает?(Извините, я не могу проверить это без фактического изменения моего часового пояса.)

3 голосов
/ 30 января 2012

Хм, возможный обходной путь - анализ строки и использование методов.

setUTCDate()    
setUTCFullYear()
setUTCHours()

Возможно, есть лучшее решение

0 голосов
/ 30 января 2012

Нет гарантии, что входные данные будут правильно проанализированы, если в текущем формате.Процедура Date.parse () требуется только для разбора строк в определенном формате - анализ других форматов зависит от реализации.Если вы осмеливаетесь полагаться на реализации, удовлетворяющие требованиям, добавьте данные для соответствия определенному формату:

new Date(currentDate + '.000Z')

В качестве альтернативы используйте библиотеку, которая может анализировать данные в текущем формате, например, jQuery или Globalize.js.

Аналогичные соображения применимы к написанию дат.Не гарантируется выходной формат, если вы используете Date.toString(), явно или как в alert(date).Даже на одном компьютере разные браузеры будут использовать разные локализованные форматы.

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