Создание даты автоматически добавляет один час к моей дате ввода - PullRequest
0 голосов
/ 14 ноября 2018

скажем, у меня есть эта дата в качестве ввода:

var _dateA = 2018-11-15T11:13:26.687Z

Если я делаю, что угодно,

var _dateB = new Date(_date)

или

var _dateB = moment(_date)

Я получаю это как результат ==>

_dateB = Thu Nov 15 2018 12:13:26 GMT+0100 (heure normale d’Europe centrale)

Я понял, что есть проблема с часовым поясом, но как я могу получить объект Date или Moment, не имея этого часа больше?

Требуемый результат => Thu Nov 15 2018 11:13:26 GMT+0100

Текущий результат => Thu Nov 15 2018 12:13:26 GMT+0100

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Когда вы «выводите» объект Date через console.log(), alert() и т. Д., По умолчанию используется метод toString(), преобразующий объект даты в строку локального часового пояса для отображения (именно поэтому вывидеть вашу дату по вашему местному времени).

Анализ строк даты с конструктором Date не рекомендуется (хотя, я подозреваю, что большинство браузеров, вероятно, обрабатывают даты ISO 8601, как и в вашем вопросе, довольно хорошо) - см. Примечание параметра dateString здесь .Итак, если вам нужно создать объект даты, а также вывести строку даты, то вы можете проанализировать строку ISO 8601 с split(), используя набор символов регулярного выражения для нескольких разделителей, а затем с помощью new Date(Date.UTC(...)) создать объект даты UTC.Вы также можете сделать это с помощью момента.js, но ниже следует проиллюстрировать происходящее более подробно.

Например:

const text = '2018-11-15T11:13:26.687Z'

const [y, m, d, hh, mm, ss, ms] = text.split(/[-T:.Z]/);
const date = new Date(Date.UTC(y, m - 1, d, hh, mm, ss, ms));

console.log(date.toLocaleString()); // date string in local timezone
console.log(date.toUTCString()); // UTC date string
console.log(JSON.stringify(date)); // ISO 8601 date string in most browsers
0 голосов
/ 14 ноября 2018

Вам необходимо использовать Date.toUTCString(), который преобразует дату в строку, используя часовой пояс UTC

var _dateA = '2018-11-15T11:13:26.687Z';
var _dateB = new Date(_dateA);
console.log(_dateB.toUTCString());
...