지난 이틀 동안 버그를 수정하다가 문제를 발견했습니다. IE와 Google Chrome의 toLocaleTimeString() 메서드에서 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() 세 가지 메소드로 구한 결과에 대해 "10"보다 작으면 있습니다. 다른 형식의 차이점은 필요한 경우에만 보충하세요
. rreee위 내용은 toLocaleTimeString() 메소드에 존재하는 문제점 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!