如何在日历中从瞬间.js加载无限的前一周?



当我单击上个月按钮无限时,我想加载上周。我正在使用此代码,但它仅提供上个月一次。单击一下后它不起作用。我正在使用此代码

function myFunction(e) {
if(e == 1) {
currentWeek = currentWeek + 1;
}else if (e == -1){
currentWeek = currentWeek - 1;
}else {
currentWeek = 0
}
var startOfWeek, endOfWeek;
if(currentWeek == 0){
startOfWeek= moment().isoWeekday(1).startOf('week');
endOfWeek = moment().isoWeekday(1).endOf('week');
//  console.log(startOfWeek);
}else if(currentWeek > 0) {
startOfWeek = moment().add(currentWeek, 'weeks').startOf('week')
endOfWeek = moment().add(currentWeek, 'weeks').endOf('week')
}else{
startOfWeek = moment().subtract(1, 'weeks').startOf('week')
endOfWeek = moment().subtract(1, 'weeks').endOf('week')
}
var days = [];
var day = startOfWeek;
while (day <= endOfWeek) {
days.push(day.toDate());
day = day.clone().add(1, 'd');
}
}

你必须非常小心Moment.js。它的大多数函数都会更改原始对象。另一方面,您应该将当前一周保存在变量中(我想这就是代码中currentWeek应该做的(。你的问题是你每次创建一个新的moment((,它将设置为本周,你只能向前或向后移动1周。这是我的解决方案:

工作小提琴

Javascript代码:

// Global variable to track the week 
var timeTracker = moment();
function getDays(e) {
var days = [];
if (e == 0) {   
timeTracker = moment();
} else {
timeTracker.add(e, 'weeks');
}
// Find start and end of week
var startOfWeek= timeTracker.clone().startOf('isoWeek');
var endOfWeek = timeTracker.clone().endOf('isoWeek');
var days = [];
var day = startOfWeek;
while (day.isSameOrBefore(endOfWeek)) {
days.push(day.toDate());
day = day.add(1, 'days');
}
return days.join('<br />'); 
}
function displayPrevWeek() {            
document.getElementById('daysOfWeek').innerHTML = getDays(-1); 
} 
function displayCurrentWeek() {      
document.getElementById('daysOfWeek').innerHTML = getDays(0); 
} 
function displayNextWeek() {    
document.getElementById('daysOfWeek').innerHTML = getDays(1); 
}

网页代码:

<label>Week:</label>
<div id="daysOfWeek">
</div>
<div>
<button onclick="displayPrevWeek()">Previous week</button>
<button onclick="displayCurrentWeek()">Current week</button>
<button onclick="displayNextWeek()">Next week</button>
</div>

重要提示:我看到您希望星期一是一周的第一天。我不知道为什么moment().isoWeekday(1).startOf('week')不把星期一作为第一天回来,而是星期天。相反,我使用moment().startOf('isoWeek')也许这是目前的做法(请参阅Moment.js的发行说明(。

重要说明 2:此代码支持向前或向后跳转不同的周数(每次不必只有 1 周(。只需使用不同的参数 1 或 -1 调用getDays

最新更新