這兩天修改一個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:此圖為兩個方法在Google上的運作情況,可以看出上部分 toLocaleTimeString()處理的,為分、秒分別補0了;下部分是分別取得的分、秒,沒有補0。
圖2:此圖為兩個方法在IE11上的運作情況。 出問題了,上部分 toLocaleTimeString()處理的,在為分、秒分別補0的操作下,還為開頭和":"的左右各加了一個空格 ,從而導致整個字串的長度由原來的8加長到13,從而導致了 substr(index,length) 方法的運行結果與預想的不一致;而下部分由於是分別獲取的時,分、秒,雖然沒有補0,但是字符串是我們自己拼接的,不存在添加空格這個問題,所以substr(index,length)方法的運行結果與預想的一致,能得到我們想要的字串。
圖3:此圖為兩種方法在Google上的運行情況,在時、分、秒都超過10的情況下,顯示的結果字符字串和資料長度是一致的。
圖4:此圖為兩種方法在IE11上的運行情況,在時、分、秒都超過10的情況下,顯示的結果字串看似一樣。 其實不一樣,兩者長度區別,由於toLocaleTimeString() 添加空格的緣故。
圖5:此圖為兩個方法在Google上的運行 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); }
以上是toLocaleTimeString()方法存在的問題分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!