這兩天修改一個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); }