日期字符串toLocaleDateString 在IE edge中怪异的表现

FE_前端女孩
  • 8
  1. 在IE edge中,用toLocaleDateString获得的时间字符串,表现很诡异。。。求指点

代码如下:

    var tableDateValue = [
        new Date(new Date().getTime() - 3600 * 1000 * 24 * 8).toLocaleDateString('zh-Hans-CN').replace(/日/g, '').replace(/\/|年|月/g, '-'),
        new Date(new Date().getTime() - 3600 * 1000 * 24 * 1).toLocaleDateString('zh-Hans-CN').replace(/日/g, '').replace(/\/|年|月/g, '-')
    ];
    console.log(tableDateValue[0]);
    console.log(tableDateValue[1]);
    var params = {
        startTime: specifyTime(tableDateValue[0]),
        endTime: specifyTime(tableDateValue[1])
    };
    console.log(params);
    function specifyTime(time) {
        var arr = time.split('-');
        console.log(arr);
        console.log(typeof arr[1]);
        console.log(arr[1]);
        console.log(arr[1].length);
        console.log(Number(arr[1]));
        if (arr[1].length < 2 && Number(arr[1]) < 10) {
            arr[1] = '0' + arr[1];
        }
        console.log(arr[1]);
        if (arr[2].length < 2 && Number(arr[2]) < 10) {
            arr[2] = '0' + arr[2];
        }
        return arr.join('-');
    }
    
    
    打印出来的arr[1].length 竟然是3   在IE9,IE10中的表现是正常的,为啥IE edge如此奇怪,求解~~

回复
阅读 2.8k
3 个回答

也是看了先前两位的回答,有了思路,这样转化就是正常的了。。。。感谢大家提供的思路(自己验证了,没有问题)

var tableDateValue = [

        new Date(new Date().getTime() - 3600 * 1000 * 24 * 8).toLocaleDateString('zh-Hans-CN').replace(/日/g, '').replace(/\/|年|月/g, '-').replace(/[^\d-]/g,''),
        new Date(new Date().getTime() - 3600 * 1000 * 24 * 1).toLocaleDateString('zh-Hans-CN').replace(/日/g, '').replace(/\/|年|月/g, '-').replace(/[^\d-]/g,'')
    ];

可能在IE11中toLocaleDateString()会出现问题
打印一下:

let str = tableDateValue[0]
for(var i=0;i<str.length;i++)console.log(i,str.charCodeAt(i),str.charAt(i))

这里有解决方案
toLocaleDateString().replace(/u200E/g,'')
试试能否解决你的问题

这个问题你在

toLocaleDateString('zh-Hans-CN').replace(/日/g, '').replace(/\/|年|月/g, '-')

的时候(兼容)就已经出了问题了
中文打印出来的 xxxx年xx月xx日
ie edge下面打印出来的就已经是15个字符长度了,即时你最终替换成了 xxxx-xx-xx 后这个长度还是保持不变的。
即使类型一样,输出的时候你感觉也一样,但是你用

console.log(arr[1].charAt(0));

打印一下你就能看出来【0指向的是一个空白字符】【1指向的是9】【2指向的还是空白】

toLocaleDateString('en').replace(/[^ -~]/g,'').replace(/(\d)\/(\d)\/(\d{4})/g,"$3-$2-$1"),

这个亲测是可以的

最主要的还是replace(/[^ -~]/g,'')

个人推荐你还是自己写一个格式化时间的函数

补充一下,/[^ -~]/ 很多人都问这个啥,这是正则表达式,匹配除了 [空格到~]之间的所有字符,这些字符你去看一下ASCII码就知道了(本人上网查了一下,确实查不到[^ -~]

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏