Moment.js - 周一以isoWeekday()开始一周

sav*_*ger 107 javascript momentjs

我正在创建一个日历,我以表格格式打印周.一个要求是,我可以根据某些用户选项在周一或周日开始这几周.我很难使用moment的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);
}
Run Code Online (Sandbox Code Playgroud)

的jsfiddle

编辑我误解了isoWeekday实际在做什么.我认为它设置了"一周中的哪一天是一周的第一天"变量(不存在).它实际上只是改变星期几moment.weekday(),但是使用1-7范围而不是0-6.

tet*_*tri 218

尝试使用begin.startOf('isoWeek');而不是begin.startOf('week');

  • 最新版本中带有大写字母W的`isoWeek` (18认同)
  • 当前版本的moment.js正在使用`isoweek`. (14认同)
  • `startOf('week')`取决于当前的语言环境,其中星期日显然标志着你的情况下一周的开始.`startOf('iweek')`将获得本周的ISO开始,即星期一.但你说得对,我在官方网站上找不到任何文件...... (9认同)
  • 记录在这里:[开始时间](http://momentjs.com/docs/#/manipulating/start-of/) (7认同)
  • 它有效,但奇怪的是没有这方面的文件 (2认同)
  • 根据@ savinger的评论和[当前文档](http://momentjs.com/docs/)编辑:) (2认同)

let*_*ves 10

startOf之前打电话isoWeekday.

var begin = moment(date).startOf('week').isoWeekday(1);
Run Code Online (Sandbox Code Playgroud)

工作演示

  • 这不能正常工作。对于今天的日期 2016-09-05,它返回 2016-08-29 作为一周的开始日期,但这是不正确的,因为今天是星期一(iso 周)。正确的答案已经被接受。 (2认同)

小智 5

这样,您可以设置一周的第一天。

moment.locale('en', {
    week: {
        dow: 6
    }
});
moment.locale('en');
Run Code Online (Sandbox Code Playgroud)

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