您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

toLocaleTimeString()方法存在的问题分析

2024/3/25 11:02:15发布22次查看
这两天修改一个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 截图如下:
图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 以上就是tolocaletimestring()方法存在的问题分析的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product