[英]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.