簡體   English   中英

如何修改momentjs日歷以使周從用戶指定的一天開始?

[英]How to modify a momentjs calendar to have weeks start on a user-specified day?

我正在用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
        });
    }
}

您可以簡單地使用week()startOf('week')來代替isoWeek()startOf('week')

week()

獲取或設置一年中的星期。

因為不同的語言環境對一年中的星期編號的定義不同,所以Moment.js添加了moment#week來獲取/設置一年中的本地化星期。

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

這樣,您的日歷將取決於語言環境。 您可以使用updateLocale方法自定義一周的第一天(針對當前語言環境),只需更改week對象的dow (星期幾)鍵(如果需要,還可以按doy鍵)的值即可。 請參閱文檔的“ 自定義”部分以獲取有關語言環境自定義的更多信息。

如果需要,還可以定義偽語言環境

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM