如何使用javascript中的currentDate获取一周中的7天

How to get the 7 days in a week with a currentDate in javascript?

本文关键字:一周 7天 获取 currentDate 何使用 javascript 中的      更新时间:2023-09-26

(首先,很抱歉我的英语不好,我是初学者)

我有一张按日期排列的百分比图表。我想在x轴上显示本周的每一天。

所以,我试着找到如何度过一周中的七天。这就是我所拥有的:

var curr = new Date; // get current date
var first = curr.getDate() - curr.getDay();//to set first day on monday, not on sunday, first+1 :
var firstday = (new Date(curr.setDate(first+1))).toString();
for(var i = 1;i<7;i++){
var next = first + i;
var nextday = (new Date(curr.setDate(next))).toString();
alert(nextday);
}

警报开始得很好。。。直到月底。这就是我得到的:

1 : "Mon 27 Feb 2012 ..."
2 : "Tue 28 Feb 2012 ..."
3 : "Wed 29 Feb 2012 ..."
4 : "Thu 01 Mar 2012 ..."
5 : "Sat 31 Mar 2012 ..."
6 : "Sun 01 Apr 2012 ..."

所以,正如你所看到的,它改变了星期五和。。。奇怪的是,它切换到了好日期。。。4周后。。。

那么,你有更好的解决方案吗?或者你可以帮助我,告诉我问题出在哪里。

谢谢!

恐怕您已经落入了对象突变的众多陷阱之一。:)

问题是,在"var nextday=…"行中,您通过调用setDate()来更改每次迭代中保存在"curr"中的日期。只要下一个在当前月份的范围内,这是没有问题的curr.setDate(next)在这种情况下相当于前进一步。

下一次达到30时,问题就开始了。没有2月30日,所以setDate()将持续到下个月,产生3月1日——到目前为止还不错。不幸的是,下一次迭代调用curr.setDate(31),由于curr是三月一日(请记住,curr引用的对象在每次迭代中都会更改),我们得到。。。3月31日!其他奇怪的值也可以用同样的方式解释。

解决此问题的方法是在每次迭代中复制curr,然后调用setDate(),如下所示:

for (var i = 1; i < 7; i++) {
    var next = new Date(curr.getTime());
    next.setDate(first + i);
    alert(next.toString());
}

谢谢大家,我知道,每次我更改curr值时,都会出现问题。你所有的解决方案都在起作用,但我更喜欢最简单的,来自@denisw的解决方案,我在那里为其他有同样问题的人复制:

var curr = new Date; // get current date
var first = curr.getDate() - curr.getDay();
var firstday = (new Date(curr.setDate(first+1))).toString();
for(var i = 1; i < 7; i++) {
   var next = new Date(curr.getTime());
   next.setDate(first+i);
   alert(next.toString());                            
}

再次感谢大家的快速回答和帮助!

您可以添加dateday。前者从1到28.31,后者从0到6。如果您将日期设置为-3,日期类型应该做什么?

解决方案是将所有值转换为毫秒。

var ONE_DAY_IN_MILLIS = 1000*60*60*24;
var curr = new Date();
// Get offset to first day of week
// Note: Depending on your locale, 0 can be Sunday or Monday.
var offset = curr.getDay() * ONE_DAY_IN_MILLIS;
// Date at the start of week; note that hours, minutes and seconds are != 0
var start = new Date( curr.getTime() - offset );
for( var i=0; i<7; i++ ) {
    var nextDay = new Date( start.getTime() + ( i * ONE_DAY_IN_MILLIS ) );
    ...
}

问题是您正在修改curr日期,同时创建一个新日期。有两种方法可以做到这一点:

永远不要修改你的curr日期对象并创建新的日期:

var msInDay = 1000 * 60 * 60 * 24;
function addDays(date, days) {
  return new Date(date.getTime() + days * msInDay);        
}
var curr = new Date();
var first = addDays(curr, -curr.getDay() + 1);
alert(first);
for(var i = 1; i<7; i++) {
    var next = addDays(first, i);
    alert(next);
}

或者一致地修改curr日期对象:

var curr = new Date();
curr.setDate(curr.getDate() - curr.getDay() + 1);
alert(curr);
for(var i = 1; i<7; i++) {
    curr.setDate(curr.getDate() + 1);
    alert(curr);
}
​
let curr = new Date;
let week = []
for (let i = 1; i <= 7; i++) {
  let first = curr.getDate() - curr.getDay() + i 
  let day = new Date(curr.setDate(first)).toISOString().slice(0, 10)
  week.push(day)
}
console.log('week:', week);

jsfidde:https://jsfiddle.net/sinh_nguyen/v9kszn2h/4/