如何使用javascript中的currentDate获取一周中的7天
How to get the 7 days in a week with a currentDate in javascript?
(首先,很抱歉我的英语不好,我是初学者)
我有一张按日期排列的百分比图表。我想在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());
}
再次感谢大家的快速回答和帮助!
您可以添加date
和day
。前者从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/
- 如何在javascript中获取一年中的周数,其中周日是一周中的第一天
- 制作Easing Slider Start横幅取决于一周中的哪一天
- 如何使用AngularJS$locale选择一周的第一天
- Momentjs 一周的第一天
- HTML5 Intl API 的一周的第一天
- 时刻JS,实际一周的第一天是不正确的
- JavaScript幻灯片(从其他幻灯片开始,具体取决于一周中的哪一天)
- 使用momentJs根据Locale获取一周中的第一天
- 如何从JavaScript中的日期编号中获取一周中的哪一天
- 如何使用javascript中的currentDate获取一周中的7天
- 使用JavaScript根据一周中的哪一天更改消息
- 使用moment js创建一个包含一周中的几天和一天中的几个小时的数组
- 使用Datejs-获取一周中的哪一天
- 根据时刻js中的给定日期确定一周的第一天
- 获取一周中某一天的下一个日期
- 计算一周中两天之间的夜晚数
- 客户一周的第一天
- 在javascript中获取一周的前一天和第二天
- 使用MomentJS将YYYY:MM:DD字符串转换为一周中的一天
- 激活选项卡基于一天的一周