Javascript 如何从日历中的moment.js加载无限制的前一周?

Javascript 如何从日历中的moment.js加载无限制的前一周?,javascript,jquery,momentjs,Javascript,Jquery,Momentjs,当我点击“上个月”按钮时,我想加载上个星期。我正在使用此代码,但它只提供上个月的一次。单击一次后,它就不起作用了。我正在使用这个代码 function myFunction(e) { if(e == 1) { currentWeek = currentWeek + 1; }else if (e == -1){ currentWeek = currentWeek - 1; }else { currentWeek = 0

当我点击“上个月”按钮时,我想加载上个星期。我正在使用此代码,但它只提供上个月的一次。单击一次后,它就不起作用了。我正在使用这个代码

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');
    }
}
函数myFunction(e){
如果(e==1){
当前周=当前周+1;
}else if(e==-1){
currentWeek=currentWeek-1;
}否则{
currentWeek=0
}
var startOfWeek,周末结束;
如果(当前周==0){
startOfWeek=moment().isoWeekday(1).startOf('week');
endOfWeek=moment().isoWeekday(1).endOf('week');
//console.log(startOfWeek);
}否则如果(当前周>0){
startOfWeek=moment().add(当前周,“周”).startOf(“周”)
endOfWeek=moment().add(当前周,'weeks').endOf('week'))
}否则{
startOfWeek=moment()。减去(1,'周')。startOf('周')
endOfWeek=力矩()。减去(1,'周')。endOf('周')
}
风险值天数=[];
var日=开始周;

while(day您必须非常小心使用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>
//跟踪周的全局变量
var timeTracker=moment();
函数getDays(e){
风险值天数=[];
如果(e==0){
时间跟踪器=力矩();
}否则{
添加(e,“周”);
}
//找到一周的开始和结束
var startOfWeek=timeTracker.clone().startOf('isoWeek');
var endOfWeek=timeTracker.clone().endOf('isoWeek');
风险值天数=[];
var日=开始周;
而(一天或之前(周末)){
days.push(day.toDate());
天=天。添加(1,“天”);
}
返回天数。加入(“
”); } 函数displayPrevWeek(){ document.getElementById('daysOfWeek')。innerHTML=getDays(-1); } 函数displayCurrentWeek(){ document.getElementById('daysOfWeek')。innerHTML=getDays(0); } 函数displayNextWeek(){ document.getElementById('daysOfWeek')。innerHTML=getDays(1); }
HTML代码:

// 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')
不将星期一作为第一天返回,而是将星期天返回。我使用
矩().startOf('isoWeek')
也许这就是当前的做法(请参阅矩.js的发行说明)


重要提示2:此代码支持向前或向后跳转不同的周数(无需每次仅跳1周)。只需使用不同的参数1或-1调用
getDays

您可以创建一个简单的小提琴吗?您在哪里定义
currentWeek
?currentWeek在上面定义为currentWeek=0;我需要星期天作为一周的第一天,因此我应用startOf('week')而不是startOf('isoWeek'))