isoWeekday (7) дает мне воскресенье этой недели iso (понедельник-воскресенье)
isoWeekday («Воскресенье») дает мне воскресенье предыдущей недели iso.
версия: https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.min.js
Это правильно. Это воскресенье isoWeekday(0)
а "воскресенье" - это псевдоним для 0, а не 7.
Я подумал, как это реализовано, и понимаю, что вы имеете в виду сейчас, но результат был немного противоречивым с моей точки зрения. В документации сказано:
_ Получает или задает день недели в формате ISO, где 1 - понедельник, а 7 - воскресенье.
moment().isoWeekday(1); // Monday
moment().isoWeekday(7); // Sunday
Итак, на неделе ISO 7 всегда означает воскресенье. В документации псевдонима говорится:
_ Начиная с версии 2.1.0, также поддерживается название дня недели. Это анализируется в текущей локали ._
moment().day("Sunday");
Так что с этими двумя частями информации это может немного сбить с толку, когда вы это сделаете:
moment().isoWeekday("Sunday")
Я ожидал, что это даст тот же результат, что и moment().isoWeekday(7)
.
Кроме того, если вы скажете, что «Воскресенье» является псевдонимом для 0, это может противоречить документации здесь:
_Если в региональных настройках понедельник назначен первым днем недели, moment().weekday(0)
будет понедельником. Если воскресенье - первый день недели, moment().weekday(0)
будет воскресеньем._
Не пытаюсь хвастаться, просто хочу объяснить, почему мне это было непонятно. Возможно, было бы полезно сделать примечание в документации, в котором говорится, что «воскресенье» является псевдонимом для 0.
Честная оценка. Возможно, это должен быть псевдоним для 7 или что 0 vs 7 должны вести себя по-другому. Я недостаточно погружен в детали, чтобы быть уверенным, что делать правильно, поэтому я просто оставлю это открытым.
Взглянем на это еще раз. В документации говорится только о возможности передать "Sunday"
отношении функции day
, а не weekday
или isoWeekday
. Вероятно, их следует обновить.
Тогда я согласен, что для isoWeekday
псевдоним "Sunday"
должен быть изменен так, чтобы он соответствовал 7
, а не 0
. То, что он в настоящее время соответствует 0
является ошибкой, поскольку в этом весь смысл функции isoWeekday
.
Приветствуется пиар. Сначала отправьте PR, чтобы исправить поведение функции isoWeekday
. Затем отправьте отдельный PR на https://github.com/moment/momentjs.com с изменением документации.
Я пытаюсь создать дату с помощью номера года, недели и дня, т.е. let date = moment().year(2019).isoWeek(1).isoWeekday(1).toDate();
//Mon Dec 31 2018 11:56:45 GMT+0100 (Central European Standard Time)
проблема, с которой я сталкиваюсь, когда хочу получить год и неделю от сгенерированной даты moment(date).year() | moment(date).isoWeek()
Я ошибся. НЕ УВЕРЕНЫ, КАК ЭТО РЕШИТЬ
Самый полезный комментарий
Я подумал, как это реализовано, и понимаю, что вы имеете в виду сейчас, но результат был немного противоречивым с моей точки зрения. В документации сказано:
Итак, на неделе ISO 7 всегда означает воскресенье. В документации псевдонима говорится:
Так что с этими двумя частями информации это может немного сбить с толку, когда вы это сделаете:
moment().isoWeekday("Sunday")
Я ожидал, что это даст тот же результат, что и
moment().isoWeekday(7)
.Кроме того, если вы скажете, что «Воскресенье» является псевдонимом для 0, это может противоречить документации здесь:
_Если в региональных настройках понедельник назначен первым днем недели,
moment().weekday(0)
будет понедельником. Если воскресенье - первый день недели,moment().weekday(0)
будет воскресеньем._Не пытаюсь хвастаться, просто хочу объяснить, почему мне это было непонятно. Возможно, было бы полезно сделать примечание в документации, в котором говорится, что «воскресенье» является псевдонимом для 0.