2015-11-17 3 views
1

У меня есть этот URL-адрес, и мне нужно проанализировать и преобразовать временную метку mydate в datetime UTC (в Javascript).D3 DateTime parser учитывает часовой пояс

http://www.blablabla.com/#mydate=2009-10-12T22:09:28.000 

Очевидно, что дата закодирована в URL является просто строкой, так что не передает никакой информации часового пояса: однако он предназначен для представления времени UTC.

Преобразование UTC метки времени строку в UTC DATETIME кажется довольно простым, однако я получаю эту проблему:

Я использую D3 время синтаксического анализа, чтобы сделать это, вот важный бит:

var iso = d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%L"); 
var dateObj = iso.parse(mydate); 

mydate является строкой, и это просто обрезается версия URL, содержащего бит временной метки:

2009-10-12T22:09:28.000 

выходной сигналфункция:

Mon Oct 12 2009 23:09:28 GMT+0100 (GMT Daylight Time) 

Я бы ожидал (это то, что я хочу):

Mon Oct 12 2009 22:09:28 

ОС и браузер установлены на время UTC (здесь мы в настоящее время по Гринвичу) , Итак, почему я получаю часть (GMT Daylight Time) вместо простой строки UTC?

EDIT

Даже с простой new Date(2009, 9, 12, 22, 09, 28) я получаю тот же вопрос (нет D3, нет MomentJS, просто обычный объект JavaScript DateTime)

ответ

2

Значение «GMT + 0100 (GMT Переход на летнее время) «забавный способ Windows сказать« Британское летнее время »(или BST). In 2009, BST ran from March 29 to October 25, поэтому ваша дата 12 октября находится в этом диапазоне.

Ваш часовой пояс не установлен в "(UTC) Coordinated Universal Time", он установлен для "(UTC) Dublin, Edinburgh, Lisbon, London". Значение в скобках соответствует только . Он не отражает летнее время.

И, наконец, вывод на самом деле является объектом Date, а не строкой. Объект JavaScript Date представляет большую часть своего вывода с точки зрения по местному времени на основе часового пояса компьютера, на котором он запущен. Если вы хотите время UTC, вы можете использовать .toISOString() вместо .toString(), хотя это будет в расширенном формате ISO 8601, а не в формате, удобном для человека.

Если вы хотите читаемый человеком формат UTC основе, так как вы используете D3 уже, то сделать что-то вроде следующего:

var iso = d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%L"); 
var dateObj = iso.parse(mydate); 

var fmt = d3.time.format.utc("%c"); // or whatever format you wish 
var str = fmt.format(dateObj); 

Обратитесь к D3's time formatting documentation для более подробной информации.

Смежные вопросы