Расхождение между date-fns startOfWeek и форматом W - PullRequest
0 голосов
/ 19 марта 2019

У меня проблема с date-fns и тем, как он обрабатывает "начало недель".

«Начало недели» 2015-01-01, согласно моему календарю, было 2014-12-29.

Но, date-fns#startOfWeek говорит мне иначе:

❯❯❯ dateFns.startOfWeek(new Date('2015-01-01'))
Sun Dec 28 2014 00:00:00 GMT+0100 (Central European Standard Time)

Если я отформатирую результат startOfWeek (2014-12-28), чтобы просто вернуть номер недели, я получу «52» (что не соответствует результату, предоставленному dateFns#startOfWeek):

❯❯❯ dateFns.format(new Date('2014-12-28'), 'W')
"52"

Но если я отформатирую исходную дату (2015-01-01), она вернет «1»:

❯❯❯ dateFns.format(new Date('2015-01-01'), 'W')
"1"

Почему это расхождение? Как правильно получить правильную дату и номер недели в начале недели?

Обратите внимание, я устанавливаю TZ=Etc/UTC в моих переменных окружения, когда запускаю вышеупомянутые команды в моем CLI Node.js. Так что это не должно быть проблемой с часовым поясом.

1 Ответ

1 голос
/ 19 марта 2019

То, что вы получаете, правильно. По умолчанию неделя начинается в воскресенье. Но если вы хотите запустить его с понедельника, вы можете сделать это так:

var result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), {weekStartsOn: 1})

Ссылка

Пример:

var result = dateFns.startOfWeek(new Date('2015-01-01'))
console.log(result);

result = dateFns.startOfWeek(new Date('2015-01-01'), {weekStartsOn: 1})
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.min.js"></script>

Что касается номеров недель, W в формате () дает вам номер недели ISO, то есть он начинается с понедельника. Более того, в 2014 году было всего 52 недели.

Источник: https://www.epochconverter.com/weeks/2014

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...