момент js неправильно вычисляет номер недели - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь вычислить номер недели из времени эпохи, которое я получаю от бэкэнда. Таким образом, значение, которое я получаю от бэкэнда, это 1571097600000(15th October 2019). Теперь, когда я меняю эту дату эпохи на начало недели, используя этот код

moment(1571097600000).startOf("week").unix()*1000

, я получаю это 1570906800000(13th October 2019). Но когда я форматирую эту дату, номер недели неверен. Вот как я форматирую

moment.(1570906800000).format("W, YYYY")

Полученное значение равно 41, но на самом деле номер недели - 42. Любая идея, что здесь происходит

Вот код, который я использую

console.log(moment(1571097600000).startOf("week").unix()*1000)
console.log(moment(1571097600000).startOf("week").format("W, YYYY"))

1 Ответ

0 голосов
/ 14 апреля 2020

Что происходит, так это то, что настройки вашей системы предназначены для начала недели в воскресенье, а недели ISO начинаются в понедельник.

Ваше начальное значение времени указано для вторника 15 октября 2019 года, однако, когда вы делаете startOfWeek , для даты устанавливается вс 13 октября 2019 года, то есть на предыдущей неделе ISO. Момент. js утверждает, что использует начало недели с учетом локали, однако я не знаю, насколько это надежно. Я бы рекомендовал всегда использовать недели ISO.

Если вы хотите использовать недели ISO, используйте startOf ('isoWeek') .

let mLocal = moment(1571097600000);
let mISO = mLocal.clone();
let f = 'ddd DD MMM YYYY';
console.log('Start date : ' + mLocal.format(f));

// "locale aware" start of week
mLocal.startOf("week");
// ISO start of week
mISO.startOf("isoWeek");


console.log('Local start: ' + mLocal.format(f));
console.log('ISO week   : ' + mLocal.format("W, YYYY"))
console.log('ISO start  : ' + mISO.format(f));
console.log('ISO week   : ' + mISO.format("W, YYYY"))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...