Как получить первое число недели на основе номера недели и года в Moment.js? - PullRequest
0 голосов
/ 02 января 2019

Я пытался получить дату начала определенной недели в Moment.js из номера недели и года, выполнив moment().year(...).isoWeek(...).startOf('isoWeek')

Но, похоже, эта функция не всегда возвращает правильную дату. Например, когда я живу в Англии, а в понедельник всегда начинается неделя. Мы должны получить 31 декабря 2018 года, когда мы попросим первый день недели 1, 2019.

Это не имело место 31 декабря 2018 года, поскольку я получил 30 декабря 2019 года в качестве даты начала 1-й недели 2019 года. См. пример

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Я думаю, что нашел решение, которое искал

moment() .isoWeekYear(year) .isoWeek(week) .startOf('week')

0 голосов
/ 02 января 2019

Обратите внимание, что в разделе i18n документов указано:

По умолчанию Moment.js поставляется с английскими (США) языковыми строками.Если вам нужны другие локали, вы можете загрузить их в Moment.js для дальнейшего использования.

Так что, если вы хотите использовать en-gb локаль, вы явно загрузили ее (в браузере вы можете использоватьen-gb.js файл или moment-with-locales.js, а затем задайте локаль с помощью moment.locale('en-gb')).

Вам не нужно использовать year() setter, поскольку он устанавливает год на 2019, а moment().year(2019).isoWeek(1) дает вам первый isoweek из 2020.Вы можете создать моментальный объект для данного года, используя moment({y: year}) вместо.

Вы должны использовать week() вместо isoWeek если вы хотите получить результаты, зависящие от локали:

Поскольку разные локали по-разному определяют нумерацию недель в году, Moment.js добавил moment#week, чтобы получить / установить локализованную неделю года.

Неделя года меняется в зависимости от того, какой день является первым днем ​​недели (воскресенье, понедельник и т. Д.), И какая неделя является первой неделей года.

Здесь полныйПример кода:

// Set locale to British English
moment.locale('en-gb');
var year = 2019;
var firstMonday = moment({y: year}) // get first day of the given year
    .week(1) // get the first week according locale
    .startOf('week'); // get the first day of the week according locale
// Show result
console.log(firstMonday.format());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment-with-locales.min.js"></script>

Вы можете использовать format() для отображения значения объекта момента.

...