数组是这样的 ["2016-12", "2017-1", "2017-2"] 如何用js判断月份是否连续的,在线等大神
不知道你JS学的怎么样,先给你说逻辑,如果代码有问题回复我。
首先截取你的数组中每个数据的前四位(或者直接以-分割你的文本,然后转为数字类型),
开头四位做比较如果相同,则对-后面的经行比较,如果相减的值为-2,则判定为连续,
如果开头四位不相同,则两者想减,如果!=-1,则不连续,
如果==-1则进行后面的判断,前一个为12.后一个为1.则连续,否则也不连续。
var arr = ['2016-9', '2016-10', '2016-11', '2016-12', '2017-1', '2017-2'];
var tmpday = null;
//是否连续的标志
var lianxu = true;
for(var i=arr.length-1; i>=0; i--){
var dateStr = arr[i].split('-');
var date = new Date(parseInt(dateStr[0]), parseInt(dateStr[1], 10) - 1, 1, 0, 0, 0);
if(tmpday == null) {
tmpday = date;
} else {
tmpday.setMonth(tmpday.getMonth() - 1);//比较是否相差一个月
if(date.getTime() != tmpday.getTime()) {
//月份没有连续
lianxu = false;
break;
}
}
}
如果有帮助,希望采纳...
答案都好深奥啊!多多学习
可以先把时间全部转化为毫秒数,再比较前后两位的差值是否为24*60*60*1000(即一天的时间)即可
alert(checkIsContinuous(['2016-9', '2016-10', '2016-11', '2016-2', '2017-1', '2017-2']));
function checkIsContinuous(arr){
var arrYear = [];
var arrDay = [];
if(arr.length === 0){
return 0;
} else if(arr.length === 1) {
return 1;
}
for(var i in arr){
var temp = arr[i].split("-");
arrYear.push(parseInt(temp[0]));
arrDay.push(parseInt(temp[1]));
}
return checkContinuousFunc(arrYear, arrDay);
}
function checkContinuousFunc(arrYear, arrDay){
var result = true;
for(var i in arrYear){
i = parseInt(i);
var isYearInteger = typeof arrYear[i + 1] === 'number';
var isDayInteger = typeof arrDay[i + 1] === 'number';
if(!isYearInteger || !isDayInteger){
break;
}
result = false;
if(arrYear[i] === arrYear[i + 1]){
if((arrDay[i] + 1) === arrDay[i + 1]){
result = true;
}
} else if((arrYear[i] + 1) === arrYear[i + 1]){
if(arrDay[i] === 12){
result = arrDay[i + 1] === 1;
} else if((arrDay[i] + 1) === arrDay[i + 1]){
result = true;
}
}
if(!result) {
return result;
}
}
return result;
}