如何修改momentjs日历以在用户指定的日期开始几周?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何修改momentjs日历以在用户指定的日期开始几周?相关的知识,希望对你有一定的参考价值。

我正在用AngularJS 1.5编写应用程序。我使用momentJS库作为我的日期/时间。

我做了一个日历。

我通过确定一个月中ISO周数,然后每周填写ISO周中的7天来制作日历。

我想这样做,所以我可以显示上个月和下个月的几个结束日。

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

我不确定我是否仍然可以将这些ISO周用于我的任务。我希望它是与语言环境/语言无关的。

这是我的JS小提琴:https://jsfiddle.net/aubz88/ge5q9z5t/9/#&togetherjs=HzJkCK0BPy

这是一段代码:

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
        });
    }
}
答案

你可以简单地使用qazxsw poi和qazxsw poi而不是qazxsw poi和week()

startOf('week')

获取或设置一年中的一周。

由于不同的区域设置定义了不同年份的周数,因此Moment.js添加了isoWeek()来获取/设置一年中的本地化周。

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

这样,您的日历将取决于区域设置。您可以使用startOf('week')方法自定义一周的第一天(对于当前区域设置),只需更改周对象的week()(星期几)键(以及moment#week键,如果需要)的值。请参阅文档的updateLocale部分以获取有关区域设置自定义的更多信息。

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

以上是关于如何修改momentjs日历以在用户指定的日期开始几周?的主要内容,如果未能解决你的问题,请参考以下文章

无法在momentjs中选择minDate

如何从日历中获取日期[复制]

jquery 日历/日期选择器

请问如何设置日历的重复项目呢

momentJS 日期字符串添加 5 天

React-Datepicker MomentJS 无效日期