用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';//为验证二月转三月特初始化;可省略
完整的:
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();