Дневное форматирование даты в формате javascript

У меня есть эта проблема. У меня есть эта дата в этом формате

var datestring = "2017-10-30T15:03:10.933044Z";

Если я напишу свой код, как это

var d = new Date(datestring);

Я получаю

Mon Oct 30 2017 16:03:10 GMT+0100 (ora solare Europa occidentale)

потому что в Италии сейчас один час дневного света. Тем не менее, я хотел бы иметь один и тот же час 'datestring' (15, а не 16). Не могли бы вы помочь мне?

большое спасибо вам

2 ответа

Решение

Согласно ECMA-262, если вы хотите обрабатывать метку времени UTC в формате ISO 8601 как локальную, просто удалите Z. Однако теперь она будет представлять другой момент времени, если местный часовой пояс не GMT ​​+0000.

Кроме того, использование встроенного синтаксического анализатора не рекомендуется (см. Почему Date.parse дает неверные результаты?), Так как некоторые браузеры по-прежнему будут воспринимать его как UTC (например, Safari 11) или, возможно, недопустимый. Вы должны либо написать свою собственную функцию для разбора строки, либо использовать библиотеку. Существует множество хороших библиотек для разбора и форматирования.

var s = '2017-10-30T15:03:10.933044Z';
var d = new Date(s.replace(/z/i,''));
console.log(d.toString());

Ваша входная строка в формате ISO-8601. В этом формате Z в конце означает, что временная метка основана на UTC.

Вы можете получить более дружественное к UTC строковое представление с помощью .toUTCString() метод.

var datestring = "2017-10-30T15:03:10.933044Z";
var d = new Date(datestring);
var s = d.toUTCString();
console.log(s) // "Mon, 30 Oct 2017 15:03:10 GMT"

Если вы хотите получить строку в определенном формате, подумайте об использовании библиотеки, такой как Moment.js.

Другие вопросы по тегам