Несоответствие поведения часового пояса в NodeJS - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь проанализировать полностью указанную строку ISO даты и затем напечатать соответствующий объект даты. Мой ноутбук находится в Europe/Berlin часовом поясе (т.е. UTC+02 в летнее время). Однако, когда я явно устанавливаю переменную TZ=UTC+02 env для процесса узла, приведенный ниже скрипт дает неожиданные результаты:

// test.js
const t = '2018-07-03T10:00:00.000+02:00';
console.log(t, new Date(t), new Date(t).toLocaleString());

$ TZ='UTC+02' node test.js
> 2018-07-03T10:00:00.000+02:00 2018-07-03T08:00:00.000Z 2018-7-3 06:00:00 // 6 AM!!!

Затем я проверил смещение часового пояса (которое должно быть противоположно смещению UTC в соответствии с spec ), и оно дает мне положительное значение +02:00 для TZ=Europe/Berlin часового пояса и отрицательное для TZ=UTC+02.

const x = new Date();
const offset= -x.getTimezoneOffset();
console.log((offset>=0?"+":"")+parseInt(offset/60)+":"+offset%60);

Как можно объяснить такое поведение?

$ node --version  # on OS X high sierra 10.13.4 
> v8.7.0
...