从星期一开始,以 isoWeekday()

2022-08-30 04:08:35

我正在创建一个日历,在其中以表格格式打印出周。一个要求是,根据某些用户选项,我能够在周一或周日开始周。我很难使用时刻的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);
}

jsFiddle

编辑我误解了实际在做什么。我认为它设置了“一周中的哪一天是一周的第一天”变量(不存在)。它实际上所做的只是简单地改变星期几,就像 一样,但使用 1-7 范围而不是 0-6。isoWeekdaymoment.weekday()


答案 1

您只需要替换为 .begin.startOf('isoWeek');begin.startOf('week');


答案 2

这样,您就可以设置一周的初始日期。

moment.locale('en', {
    week: {
        dow: 6
    }
});
moment.locale('en');

确保使用它而不是 moment.isoWeekday(1)moment().weekday(1);