Javascript 如何修改momentjs日历,使周从用户指定的日期开始?

Javascript 如何修改momentjs日历,使周从用户指定的日期开始?,javascript,configuration,calendar,momentjs,Javascript,Configuration,Calendar,Momentjs,我正在用AngularJS 1.5编写一个应用程序。我将momentJS库用于我的日期/时间 我做了一个日历 我通过确定一个月内的ISO周数,然后用ISO周内的7天填写每周日历 我想这样做,这样我就可以显示上个月和下个月的最后几天 它工作得很好,但现在我的任务是让用户能够配置一周的开始日期(例如周一、周日或周六) 我不确定我是否仍然可以使用这些ISO周来完成我的任务。我希望它与区域设置/语言无关 这是我的JS小提琴: 以下是一段代码片段: var data = {}; data.weeks =

我正在用AngularJS 1.5编写一个应用程序。我将momentJS库用于我的日期/时间

我做了一个日历

我通过确定一个月内的ISO周数,然后用ISO周内的7天填写每周日历

我想这样做,这样我就可以显示上个月和下个月的最后几天

它工作得很好,但现在我的任务是让用户能够配置一周的开始日期(例如周一、周日或周六)

我不确定我是否仍然可以使用这些ISO周来完成我的任务。我希望它与区域设置/语言无关

这是我的JS小提琴:

以下是一段代码片段:

var data = {};
data.weeks = {};
data.currentCalendarMonth = moment().startOf('month');

buildMonth();

function buildMonth() {

    data.weeks = {};
    var startOfMonthISOWeek = data.currentCalendarMonth.clone().startOf('month').isoWeek();
    var endOfMonthISOWeek = data.currentCalendarMonth.clone().endOf('month').isoWeek();

    for (var i = startOfMonthISOWeek; i < endOfMonthISOWeek + 1; i++) {
        data.weeks[i] = [];
        buildWeek(i);
    }
}

function buildWeek(isoWeekNumber) {

    var start = moment().year(data.currentCalendarMonth.get('year')).week(isoWeekNumber).startOf('isoweek');
    var firstDayOfTheWeek = start.clone();

    for (var i = 0; i < 7; i++) {

        var day = firstDayOfTheWeek.clone().startOf('day').add(i, 'days');

        data.weeks[isoWeekNumber].push({
            date: day.get('date'),
            month: day.get('month'),
            year: day.get('year'),
            day: day
        });
    }
}
var data={};
data.weeks={};
data.currentCalendarMonth=moment().startOf('month');
buildMonth();
函数buildMonth(){
data.weeks={};
var startOfMonthISOWeek=data.currentCalendarMonth.clone().startOf('month').isoWeek();
var endOfMonthISOWeek=data.currentCalendarMonth.clone().endOf('month').isoWeek();
对于(var i=startOfMonthISOWeek;i
您可以简单地使用ans
startOf('week')
代替and
startOf('week')

:

获取或设置一年中的一周

由于不同的地区对一年中的周编号的定义不同,Moment.js添加了
Moment#week
以获取/设置一年中的本地化周

一年中的一周取决于哪一天是一周中的第一天(星期日、星期一等),哪一周是一年中的第一周

这样,您的日历将取决于区域设置。您可以使用
updateLocale
方法自定义一周的第一天(对于当前区域设置),只需更改week对象的
dow
(一周中的一天)键(以及
doy
键,如果需要)。有关区域设置自定义的更多信息,请参阅文档的一节

如果需要,还可以定义一个。

您可以简单地使用ans
startOf('week')
代替and
startOf('week')

:

获取或设置一年中的一周

由于不同的地区对一年中的周编号的定义不同,Moment.js添加了
Moment#week
以获取/设置一年中的本地化周

一年中的一周取决于哪一天是一周中的第一天(星期日、星期一等),哪一周是一年中的第一周

这样,您的日历将取决于区域设置。您可以使用
updateLocale
方法自定义一周的第一天(对于当前区域设置),只需更改week对象的
dow
(一周中的一天)键(以及
doy
键,如果需要)。有关区域设置自定义的更多信息,请参阅文档的一节


如果需要,您还可以定义。

我不确定在我的情况下,日历是否应该依赖于区域设置。它有一个默认值,然后用户将对其进行配置。@user1261710请参阅我答案的最后一部分,如果您不需要更改完整的区域设置,您可以创建一个可配置的星期开始。我尝试了这种方法,但它只适用于星期日和星期一。例如,moment.updateLocale(moment.locale(),{dow:2});我希望星期二是第一天,但它选择了星期天。@user1261710请注意,
dow
week
对象的一个键,您应该使用类似于:
矩.updateScale(矩.locale(),{week:{dow:2}})这应该是代码的第一行。非常感谢,这很有效。有没有办法撤消对区域设置的更改?我不确定在我的情况下,日历是否应该依赖于区域设置。它有一个默认值,然后用户将对其进行配置。@user1261710请参阅我答案的最后一部分,如果您不需要更改完整的区域设置,您可以创建一个可配置的星期开始。我尝试了这种方法,但它只适用于星期日和星期一。例如,moment.updateLocale(moment.locale(),{dow:2});我希望星期二是第一天,但它选择了星期天。@user1261710请注意,
dow
week
对象的一个键,您应该使用类似于:
矩.updateScale(矩.locale(),{week:{dow:2}})这应该是代码的第一行。非常感谢,这很有效。有没有办法撤消对区域设置的更改?