海之蓝心 2018-02-01 02:55 采纳率: 33.3%
浏览 1015
已采纳

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条回答 默认 最新

  • Go 旅城通票 2018-02-01 03:01
    关注
     就是按照字符Unicode 编码进行比较,按照对应的位置进行比较,一样比较后续的
    2018-12-1,2018-3-1,日期比较肯定第一个大于第二个,你按照字符串比较,1<3的unicode,所以停止比较后面的大于前面的导致出错
    
    所以不足二位要前面补0才不会出错,否则要转为日期对象后再对比
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 MATLAB动图的问题
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名