toLocaleTimeString()方法在IE和谷歌瀏覽器上 根據本地時間格式,把 Date 對象的時間部分(不含日期)轉換為“時間字符串”存在區別


  這兩天修改一個bug,發現一個問題:  toLocaleTimeString()方法在IE和谷歌瀏覽器上 根據本地時間格式,把 Date 對象的時間部分(不含日期)轉換為“時間字符串”存在區別。方法原本應該是沒有區別的,經過瀏覽器處理以后才出現的區別!

下面是測試代碼:

    /*
    *   驗證Date 對象(時間模塊) toLocaleTimeString()方法分別在IE和谷歌瀏覽器上 根據本地時間格式,把 Date 對象的時間部分轉換為“時間字符串”存在區別
    *   從而區別substr(index,length)方法為什么在處理同一個時間字符串,在兩個瀏覽器上的到的結果不一樣!
    * */
    function localeTime(){   //toLocaleTimeString() 根據本地時間格式,把 Date 對象的時間部分(不含日期)轉換為字符串。
        var date = new Date();     //toLocaleTimeString()轉換的時間,會在時、分、秒不足十的情況下在前面自行加"0",如"01:02:03"  兩個瀏覽器都會
        var localeTime = date.toLocaleTimeString();
        console.log(localeTime,localeTime.length);
        for(var i= 0; i<localeTime.length; i++){
            console.log(localeTime[i]);
        }
        var substr = localeTime.substr(0,6);
        console.log(substr);
    }
    function hou_min_sec(){   //getHours(),getMinutes(),getSeconds() 單獨獲取Date 對象時分秒,然后通過拼接整合成一個時間字符串。
        var date = new Date();  //getHours(),getMinutes(),getSeconds() 獲取的時間,"不會"在時、分、秒不足十的情況下自行加"0",如"1:2:3",若要格式一樣,則需要另行處理 兩個瀏覽器都不會
        var hou = date.getHours();
        var min = date.getMinutes();
        var sec = date.getSeconds();
        var hou_min_sec = hou +":"+ min +":"+ sec;
        console.log(hou_min_sec,hou_min_sec.length);
        for(var i= 0; i<hou_min_sec.length; i++){
            console.log(hou_min_sec[i]);
        }
        var substr = hou_min_sec.substr(0,6);
        console.log(substr);
    }

 截圖如下:

圖1:此圖為兩方法在谷歌上的運行情況,可以看出上部分 toLocaleTimeString()處理的,為分、秒分別補0了;下部分是分別獲取的分、秒,沒有補0

圖2:此圖為兩方法在IE11上的運行情況。出問題了,上部分 toLocaleTimeString()處理的,在為分、秒分別補0的操作下,還為開頭和":"的左右各加了一個空格從而導致整個字符串的長度由原來的8加長到13,從而導致了 substr(index,length) 方法的運行結果與預想的不一致;而下部分由於是分別獲取的時,分、秒,雖然沒有補0,但是字符串是我們自己拼接的,不存在添加空格這個問題,所以 substr(index,length) 方法的運行結果與預想的一致,能得到我們想要的字符串。

圖3:此圖為兩方法在谷歌上的運行情況,在時、分、秒都超過10的情況下,顯示的結果字符串和數據長度是一致的

圖4:此圖為兩方法在IE11上的運行情況,在時、分、秒都超過10的情況下,顯示的結果字符串看似一樣其實不一樣,兩者長度區別,由於toLocaleTimeString() 添加空格的緣故。

圖5:此圖為兩方法在谷歌上的運行 substr(index,length)的 情況,由於數據長度是一致的,所以所得到的字符串是一樣的

圖6:此圖為兩方法在IE11上的運行 substr(index,length)的 情況,由於數據長度不一致的,所以所得到的字符串也不一樣

 

  最后,對於單獨獲取的時、分、秒,即getHours(),getMinutes(),getSeconds()三個方法獲得的結果,如果不足"十",在格式上其他格式存在差異,只需要判定補足就行。

function hou_min_sec(){
        var date = new Date();
        var hou = date.getHours().toString();
        var min = date.getMinutes().toString();
        var sec = date.getSeconds().toString();
        if(hou.length == 1){ //通過判定各個變量的長度(先將它們的值轉化為字符串格式),來確定它們是否不足十
            hou = "0" + hou; //反正它們最后都是以字符串形式拼接,所以我認為這樣補"0"最簡單
        }else if(min.length == 1){
            min = "0" + min;
        }else if(sec.length == 1){
            sec = "0" + sec;
        }
        var hou_min_sec = hou +":"+ min +":"+ sec;
        console.log(hou_min_sec,hou_min_sec.length);
        for(var i= 0; i<hou_min_sec.length; i++){
            console.log(hou_min_sec[i]);
        }
        var substr = hou_min_sec.substr(0,6);
        console.log(substr);
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM