用js获取一组日期(并把当天算入)中连续的天数
刚开始可能想到单纯的比较日期大小判断连续, 而又有大小月,平闰年这些因素,还是时间戳来的安全;
首先得有一组日期,比如:
1 var arr = [
2 '2016/02/28',
3 '2016/02/29',
4 '2017/02/26',
5 '2017/02/27',
6 '2017/02/28'
7 ];
//日期格式需要注意,因为考虑到要判断日期的连续性,会把该数组中元素转为时间戳;
然后要加入当前日期,获取:
var date = new Date();
var y = date.getFullYear();
var m = date.getMonth()+1;
var d = date.getDate();
var today = y+'/'+m+'/'+d;
转时间戳方法:
//转时间戳
function time(date){
return new Date(date);
}
开始判断计数:
1 var num = 0;//声明计数变量;
2 var le = arr.length;//数组长度;
3 if(time(today)-time(arr[le-1])==86400000)
4 //日期时间戳相差一天则连续;判断当前日期与最近一天
5 {
6 num=2;//满足条件,就有连续2天;
7 //然后对数组循环判断,满足则num++;否则中断循环;
8 for(var i=le; i>0; i--){
9 if(time(arr[i-1])-time(arr[i-2])==86400000){
10 num++;
11 }else{
12 break;//如果只要找出所有连续的天数,不需要中断
13 }
14 console.log(num);
15 }
16 }else{
17 console.log('第一天');
18 }
为了方便看效果可以将当前日期初始化;
today = '2017/03/01';//为验证二月转三月特初始化;可省略
完整的:
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 function lianxuDay(){
2 var arr = [
3 '2016/02/28',
4 '2016/02/29',
5 '2016/02/26',
6 '2017/02/27',
7 '2017/02/28'
8 ];
9 var date = new Date();
10 var y = date.getFullYear();
11 var m = date.getMonth()+1;
12 var d = date.getDate();
13 var today = y+'/'+m+'/'+d;
14 today = '2017/03/01';//为验证二月转三月特初始化;可省略
15 console.log(today);
16 //转时间戳
17 function time(date){
18 return new Date(date);
19 }
20 var num = 0;//声明计数变量;
21 var le = arr.length;//数组长度;
22 //console.log(time(today)-time(arr[le-1]));
23 if(time(today)-time(arr[le-1])==86400000)
24 //日期时间戳相差一天则连续,此法虽笨,但实用;判断当前日期与最近一天
25 {
26 num=2;//满足条件,连续2天;
27 //然后对数组循环判断,满足则num++;否则中断循环;
28 for(var i=le; i>0; i--){
29 if(time(arr[i-1])-time(arr[i-2])==86400000){
30 num++;
31 }else{
32 break;//如果只要找出所有连续的天数,不需要中断
33 }
34 console.log(num);
35 }
36 }else{
37 console.log('第一天');
38 }
39 }
40 lianxuDay();