js 日期比较 为什么 格式不一样就不行了,它的底层是怎么转换的?
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后再做比较,但貌似不是这样的,想知道它底层是什么转换的,为什么格式不一样就不行了

4个回答

 就是按照字符Unicode 编码进行比较,按照对应的位置进行比较,一样比较后续的
2018-12-1,2018-3-1,日期比较肯定第一个大于第二个,你按照字符串比较,1<3的unicode,所以停止比较后面的大于前面的导致出错

所以不足二位要前面补0才不会出错,否则要转为日期对象后再对比

先转为时间对象,然后比较时间戳

 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
})

日期比较最好是转换为日期类型后再进行比较

 var d1 = new Date(arr1[i].replace(/\-/g, "\/"));
qq_31456835
木小耳 不用把 - 换成 / , new Date('2018-2-1') 可以直接用
接近 2 年之前 回复

日期比较用js日期函数,你这样是比较字符串,是按照Unicode编码来的,类似于字典排列

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!

相似问题

5
javascript 中日期的setDate()方法问题?
10
js有什么简便的方法把2017-4-5变为2017-04-05这种格式
8
SpringMvc 返回model对象如何通过js获取model对象所传的json?
4
a.js中executeScript给某tab注入b.js,b.js计算完的值怎么传回a.js中?
15
javascript中递归实现1+2+3+4+...+100怎么实现,js递归输出结果可以用log
6
鼠标移动事件,为什么底层元素不触发?
4
使用 jquery.wordexport.js怎么保证导出后的Word和网页内容格式一样
5
javascript输出的字符串,用什么办法换行?<br>为什么会被输出出来,我要换行
12
a.jsp为什么能调用b.jsp里面的js方法?
7
回答赚c币看这里:javascript中实现日期转中文的星期几,还有数字转中文大写
4
为什么浏览器地址栏可以输入js代码,但是我试了试不可以为什么望解答
2
javascript怎么实现判断页面上的链接的功能,判断链接怎么用js语言实现呢?
9
javascript都来回答,怎么实现下拉选择日期的功能,JQ或者JS怎么实现?
7
javascript简单的问题,想要c币的都来回答:怎么在js网页中实现
4
js,通过字面量访问对象底层是怎么样的,太复杂的字面量对效率有影响吗?
2
javascript怎么实现调用api的功能,api调用功能的语句的格式是怎么样的?
2
【JavaScript】js中有时候调用方法使用引号,有时候不使用引号,这是为什么?
3
Vue从一个页面跳转到一个页面 在返回,第一个页面的js无法使用了,这是为什么 求大神指教
2
我在vue.js命令中创建vue项目时乱码了,是什么原因??该怎么解决呢?
2
javascript怎么创建对象?js的对象和java有什么不同?