Я создаю календарь, в котором распечатываю недели в табличном формате. Одно из требований состоит в том, чтобы я мог начинать недели в понедельник или воскресенье, в зависимости от выбора пользователя. Мне сложно использовать метод isoWeekday момента .
// Start of some date range. Can be any day of the week.
var startOfPeriod = moment("2013-06-23T00:00:00"),
// We begin on the start of the first week.
// Mon Tues Wed Thur Fri Sat Sun
// 20 21 22 23 24 25 26
begin = moment(startOfPeriod).isoWeekday(1); // will pull from user setting
console.log(begin.isoWeekday()); // 1 - all good
// Let's get the beginning of this first week, respecting the isoWeekday
begin.startOf('week');
console.log(begin.isoWeekday()); // 7 - what happened ???
// Get column headers
for (var i=0; i<7; i++) {
console.log(begin.format('ddd')); // I want Monday first!
begin.add('d', 1);
}
ИЗМЕНИТЬ Я неправильно понял, что на isoWeekday
самом деле происходит. Я думал, что он устанавливает переменную «какой день недели является первым днем недели» (которой не существует). На самом деле он просто меняет день недели, точно так же moment.weekday()
, но использует диапазон от 1 до 7 вместо 0-6.
javascript
momentjs
savinger
источник
источник
startOf('week')
зависит от текущего местоположения, где воскресенье, очевидно, знаменует начало недели в вашем случае.startOf('iweek')
получит начало недели по ISO, то есть понедельник. Но ты прав, я не нашел никакой документации на официальном сайте ...isoweek
.isoWeek
, с большой буквы, в последней версииЗвоните
startOf
раньшеisoWeekday
.Рабочая демонстрация
источник
Таким образом вы можете установить начальный день недели.
Обязательно используйте его с
moment().weekday(1);
вместо moment.isoWeekday (1)источник
думал, что добавлю это для любых будущих взглядов. Он всегда будет следить за тем, чтобы его понедельник, если необходимо, также можно было использовать для обеспечения воскресенья. Мне всегда нужен понедельник, но локальный зависит от используемой машины, и это легко исправить:
источник
Вот более общее решение для любого дня недели. Рабочая демонстрация на jsfiddle
источник
Для тех, кто хочет
isoWeek
быть по умолчанию, вы можете изменить поведение момента как таковое:Теперь вы можете просто использовать,
someDate.startOf('week')
не беспокоясь о том, что вы получите воскресенье, или о том, что использоватьisoweek
илиisoWeek
и т. Д.Кроме того, вы можете сохранить это в переменной, например,
const period = 'week'
и безопасно использовать в операцияхsubtract()
илиadd()
, напримерmoment().subtract(1, period).startOf(period);
. Это не сработает с периодом существованияisoWeek
.источник