var arr1 = ['2018-03-03','2018-03-04','2018-03-05','2018-03-12','2018-04-05','2018-04-12','2018-12-06'];
for(var i=0; i<arr1.length;i++) {
if((arr1[i] >= "2018-03-03" && arr1[i] <= "2018-04-13")) {
continue;
}
console.log(arr1[i])
}
输出2018-12-06
发现日期只要格式一样可以像上面这样直接比较
var arr1 = ['2018-3-3','2018-3-4','2018-3-5','2018-3-12','2018-4-5','2018-4-12','2018-12-6'];
for(var i=0; i<arr1.length;i++) {
if((arr1[i] >= "2018-3-3" && arr1[i] <= "2018-4-13")) {
continue;
}
console.log(arr1[i])
}
输出2018-3-12,2018-4-5,2018-12-6
但把0去掉会出现问题,格式不一样了
var a = '2018-03-02';
var b = '2018-03-03';
var sum1 = 0;
var sum2 = 0;
for(var i=0; i<a.length; i++) {
sum1+=''+a[i].charCodeAt(0);
sum2+=''+b[i].charCodeAt(0);
console.log(a[i].charCodeAt(0) , b[i].charCodeAt(0));
}
console.log(sum1);
console.log(sum2);
console.log(a.charAt(a));
我试着用charCodeAt函数转成Unicode,以为它转成Unicode后再做比较,但貌似不是这样的,想知道它底层是什么转换的,为什么格式不一样就不行了
就是按照字符Unicode 编码进行比较,按照对应的位置进行比较,一样比较后续的
2018-12-1,2018-3-1,日期比较肯定第一个大于第二个,你按照字符串比较,1<3的unicode,所以停止比较后面的大于前面的导致出错
所以不足二位要前面补0才不会出错,否则要转为日期对象后再对比
日期比较最好是转换为日期类型后再进行比较
var d1 = new Date(arr1[i].replace(/\-/g, "\/"));
日期比较用js日期函数,你这样是比较字符串,是按照Unicode编码来的,类似于字典排列
先转为时间对象,然后比较时间戳
var arr1 = ['2018-03-03','2018-03-04','2018-03-05','2018-03-12','2018-04-05','2018-04-12','2018-12-06'];
var timeObj = []
arr1.forEach(function (item) {
timeObj.push({
timeStr: item,
timer: new Date(item).getTime()
})
})
// 在比较timeObj里面的时间戳大小
timeObj.sort(function(a, b) {
var timerA = a.timer
var timerB = b.timer
return timerA - timerB
}).map(function (item) {
return item.itemStr
})