2016-09-01 2 views
1

Может кто-нибудь, пожалуйста, обновите мое понимание в javascripts new Date ('') разбор?Javascript date parse why

Например, почему это:

var _date = new Date('2016-10-15'); 

равна

_date = Fri Oct 14 2016 17:00:00 GMT-0700 (US Mountain Standard Time) {} 

и не равна

Oct 15 2016 

Если вы используете moment.js:

var _testdate = moment('2016-10-15').toDate(); 

_testdate = Sat Oct 15 2016 00:00:00 GMT-0700 (US Mountain Standard Time) {} 
+2

Строка даты, в которую вы прошли, интерпретируется как дата UTC ISO, так что это на 7 часов раньше вас. Когда вы вернете строку, это будет сделано по местному времени. – Pointy

+1

Если вы проснетесь рано и снова попробуете свой код, он будет работать нормально :) – Pointy

+0

Итак, как вы это делаете, поэтому он не интерпретируется как UTC и действует как moment.js? Я очень релятивистский для себя. Я знаю, что ваше время не то же самое, что мое время, особенно приближающееся к скорости света, но меня это не волнует: P – Watson

ответ

3

Поскольку в отличие от ISO 8601 формы с датой, такие как «2016-10-15», рассматриваются как UTC конструктором даты и Date.parse, тогда как библиотеки, такие как moment.js, соответствуют ISO 8601 и рассматривают их как локальные ,

Так как ваша система настроена на UTC-0700, «2016-10-15» обрабатывается как 2016-10-15T00: 00: 00Z (то есть UTC + 0000), то есть 2016-10-14 17: 00:00 в вашем местном часовом поясе.

+0

И нет никаких переопределяющих функций или переменных, которые вы можете передать в конструкцию Date, чтобы переопределить это поведение? Возможно ли сформировать строку таким образом, чтобы она не являлась только формой даты, но приводила к форме только даты? – Watson

+0

@ Watson- нет и да. Объект Date - это просто значение времени (мс от эпохи), больше ничего. Разбор строк расширенного формата ISO 8601 указан в [* ECMA-262 *] (http://ecma-international.org/ecma-262/7.0/index.html#sec-date.parse). Любой другой синтаксический анализ зависит от реализации, поэтому ** сильная ** рекомендация всегда анализировать вручную. Если вы используете библиотеку, всегда передавайте формат для синтаксического анализа, никогда не оставляйте его на произвол. – RobG