Как преобразовать это правильно?
Реализации, согласующиеся с ECMAScript эд 5 (ES5) и позже будет правильно разобрать строку либо конструктору Date или Date.parse, так:
var strDateTime = "2017-01-05T15:03:25.21";
var myDate = new Date(strDateTime);
будет производить дату 5 Jan 2017 3 : 03: 25,21 PM в местном часовом поясе.
Однако это не рекомендуется делать с учетом общих несоответствий при анализе между реализациями. Следует использовать либо пользовательскую функцию, либо библиотеку, например. используя fecha.js:
var myDate = fecha.parse(strDateTime, "YYYY-MM-DDTHH:mm:ss.SS")
С ES5 и позже, ISO 8601 даты и времени строки в основном разобраны, как указано в ISO 8601. Основные отличия:
- Дата-только формы, как «2016-12 -12" разобраны в формате UTC, а не местный
- только „упрощения ISO 8601 расширенного формата“ поддерживается, как описано в ECMA-262 §20.3.1.6 Date Time String Format
Так Дано:
var s = "2017-01-05T15:03:25.21";
var d = new Date(s)
затем d будет преобразован в Дату значения времени UTC на основе установки хост-системы часовых поясов. Если ваш хост настроен на UTC + 0800, то это часовой пояс, который применяется.
Объекты даты не имеют часового пояса. Все, что у них есть, - это одно значение времени, которое представляет миллисекунды с 1970-01-01T00: 00: 00Z. Любая связанная информация о часовом поясе поступает от хоста.Таким образом, комментарий:
//myDate will have another redundant time-zone offset.
является неправильным. Установка времени хоста-зона будет использоваться для определения смещения, которое используется для вычисления значения времени UTC, а также рассчитать локальные значения, возвращаемые получить * методов, как getFullYear, getMonth, GetDate, getHours и т.д.
строка "2017-01-05T15: 03: 25.21" в системе со смещением +0800 будет генерировать временную стоимость 1483599805210, которая представляет 2017-01-05T07: 03: 25,21Z (т.е. UTC + 0000).
Если вы хотите отправить временную метку, которая представляет определенный момент для клиентов в разных часовых поясах, то один из следующих вариантов должен быть установлен.
Append часовой пояс в строку:
2017-01-05T15:03:25.21+0800
Используйте UTC эквивалентно:
2017-01-05T07:03:25.21Z
Используйте значение времени:
1483599805210
Последнее, как правило, предпочтителен в качестве new Date(timevalue)
поддерживается всеми реализациями, недвусмысленна и может быть легко преобразована для использования в других системы.
Вы можете использовать moment.js или другую выделенную библиотеку - это намного проще, чем делать это вручную, потому что у JS на данный момент есть плохая встроенная поддержка логики даты и времени. –
, пожалуйста, примите мой ответ как правильный, если он будет полезен :) –
@ Овидиу Долха, спасибо, что упомянул об этом, так как я думал, что мне не хватает. – zeroflaw