zoukankan      html  css  js  c++  java
  • 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);
        }
  • 相关阅读:
    JSP application用法
    JSP到底内置了几大对象?
    ConcurrentHashMap之实现细节 5
    假如我是JAVA开发人员
    jBPM
    ServletContext与ServletConfig分析
    oracle建立索引原则
    70个新鲜实用的JavaScript和Ajax技术(上)
    ConcurrentHashMap之实现细节
    ConcurrentHashMap之实现细节3
  • 原文地址:https://www.cnblogs.com/donghuang/p/6972897.html
Copyright © 2011-2022 走看看