鍍金池/ 問答/HTML/ 日期字符串toLocaleDateString 在IE edge中怪異的表現(xiàn)

日期字符串toLocaleDateString 在IE edge中怪異的表現(xiàn)

  1. 在IE edge中,用toLocaleDateString獲得的時(shí)間字符串,表現(xiàn)很詭異。。。求指點(diǎn)

代碼如下:

    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中的表現(xiàn)是正常的,為啥IE edge如此奇怪,求解~~

回答
編輯回答
背叛者

也是看了先前兩位的回答,有了思路,這樣轉(zhuǎn)化就是正常的了。。。。感謝大家提供的思路(自己驗(yàn)證了,沒有問題)

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,'')
    ];
2017年1月25日 06:56
編輯回答
你的瞳

可能在IE11中toLocaleDateString()會(huì)出現(xiàn)問題
打印一下:

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,'')
試試能否解決你的問題

2017年4月30日 12:55
編輯回答
撥弦

這個(gè)問題你在

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

的時(shí)候(兼容)就已經(jīng)出了問題了
中文打印出來的 xxxx年xx月xx日
ie edge下面打印出來的就已經(jīng)是15個(gè)字符長(zhǎng)度了,即時(shí)你最終替換成了 xxxx-xx-xx 后這個(gè)長(zhǎng)度還是保持不變的。
即使類型一樣,輸出的時(shí)候你感覺也一樣,但是你用

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

打印一下你就能看出來【0指向的是一個(gè)空白字符】【1指向的是9】【2指向的還是空白】

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

這個(gè)親測(cè)是可以的

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

個(gè)人推薦你還是自己寫一個(gè)格式化時(shí)間的函數(shù)

補(bǔ)充一下,/[^ -~]/ 很多人都問這個(gè)啥,這是正則表達(dá)式,匹配除了 [空格到~]之間的所有字符,這些字符你去看一下ASCII碼就知道了(本人上網(wǎng)查了一下,確實(shí)查不到[^ -~]

2017年12月22日 08:27