Ответ на вопрос "Является ли браузер MomentJS независимым?"может быть "Нет".Получение длинного от даты Момента может зависеть от браузера, который вы используете.То же касается и Date
объекта Javascript.
Эта проблема связана с историческим применением DST во всех странах мира, а затем с историческими смещениями часовых поясов, которые не наблюдались до последних версий ECMAScript.Поэтому старые браузеры, такие как Firefox 61.0.1 и Microsoft Edge, не имеют правильного охвата правил DST, действующих во всех различных местах по всему миру.
Чтобы решить эту проблему, вы должны использовать.utc()
метод MomentJS (как комментарий VincenzoC в моем ответе).
Итак, следующий код работает в каждом браузере: он всегда возвращает одно и то же время (Epoch Time) и «нормализует» DST каждый раз(всегда ложно):
var mar1947 = moment("1947-03-20T00:00:00.000Z").utc().startOf('day');
var sep1947 = moment("1947-09-10T00:00:00.000Z").utc().startOf('day');
var mar1950 = moment("1950-03-20T00:00:00.000Z").utc().startOf('day');
var sep1950 = moment("1950-09-10T00:00:00.000Z").utc().startOf('day');
var mar2019 = moment("2019-03-20T00:00:00.000Z").utc().startOf('day');
var sep2019 = moment("2019-09-10T00:00:00.000Z").utc().startOf('day');
console.log("March 1947:", mar1947.valueOf(), mar1947.isDST());
console.log("September 1947:", sep1947.valueOf(), sep1947.isDST());
console.log("March 1950:", mar1950.valueOf(), mar1950.isDST());
console.log("September 1950:", sep1950.valueOf(), sep1950.isDST());
console.log("March 2019:", mar2019.valueOf(), mar2019.isDST());
console.log("September 2019:", sep2019.valueOf(), sep2019.isDST());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js"></script>
Обратите внимание, что этот метод не работает должным образом, если вы используете его после (а не до) других методов, таких как startOf()
(см. Связанную проблемуна github )
Здесь вы можете использовать несколько игровых площадок: Codepen1 , Codepen2