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'))