момент js: странный ут c преобразование для часового пояса: остров Киритимати, UTC + 14 - PullRequest
1 голос
/ 23 апреля 2020

Пожалуйста, помогите разобраться, как momentjs справляется с одним уникальным часовым поясом: Kiritimati Island, UTC+14

Я хочу получить четкую дату, без часов и минут, только год, месяц и день в ут c.

Я делаю:

const date = new Date(1950, 3, 15);
const formatted = moment(date).utc(true).format();
console.log(formatted);

В любом часовом поясе, от UT C -12 до UTC + 13, я получаю:

1950-04-15T00:00:00Z // I'd like to get this for all the timezones

В часовом поясе острова Киритимати , UTC + 14, я получаю:

1950-04-14T23:55:00Z // unwanted result

Могу ли я получить одну и ту же дату для всех часовых поясов, включая Kiritimati?

PS: я меняю часовые пояса в настройках данных и времени, Windows10

Plunk

1 Ответ

1 голос
/ 24 апреля 2020

Это очень странная проблема, похоже, что в данный момент ошибка 5 минут. js для этого часового пояса. Смещение от UT C должно быть 10х40м, но это 10х45м.

И это, кажется, происходит только в более ранние даты, ну, до октября 1979 года.

Это также присутствует в Ubuntu 18, Я думал, что это может быть Windows вещь, но не похоже на это.

Я мог бы представить, что стоит сообщить об этом как об ошибке, о, подождите, похоже, она уже существует: https://github.com/moment/moment/issues/5454

В любом случае существует обходной путь, использующий библиотеку Moment Timezone .

const date = new Date(1950, 3, 15);
const dateMoment = moment(date).utc(true).format();

const tz = moment.tz.guess(true); // Get moment-timezone to guess user timezone.
const dateMomentTZ = moment.tz(date, tz).utc(true).format();

document.getElementById("mom").innerText = dateMoment;
document.getElementById("momtz").innerText = dateMomentTZ;
document.getElementById("tz").innerText = tz;
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script> 
<script src="https://momentjs.com/downloads/moment-timezone-with-data.js"></script> 

Original - with issue: <b id="mom"></b><br>
Moment.tz - workaround: <b id="momtz"></b><br>
Timezone: <b id="tz"></b>
...