ホームページ >ウェブフロントエンド >jsチュートリアル >toLocaleTimeString() メソッドに存在する問題の分析

toLocaleTimeString() メソッドに存在する問題の分析

零下一度
零下一度オリジナル
2017-06-26 11:16:342051ブラウズ

過去 2 日間バグを修正していましたが、問題が見つかりました: 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 での 2 つのメソッドの動作を示しています。 上部の toLocaleTimeString( ) ポイントを処理します。秒にはそれぞれ 0 が追加されます。下の部分は、0 の追加なしで、それぞれ によって取得された分と秒です。

図 2: この図は、IE11 での 2 つのメソッドの動作を示しています。 問題があり、上記のtoLocaleTimeString()の処理では、分と秒にそれぞれ0を加えるという操作で、の先頭と「:」の左右にスペースも追加されてしまい、 、これは文字列の長さが元の 8 から 13 に延長され、これにより substr(index, length) メソッドの実行結果が期待と一致しなくなりました。時、分、秒は別々に取得されますが、0は追加されませんが、文字列は自分で結合されており、スペースを追加することは問題ありませんので、substr(index. , length) メソッドは期待どおりであり、必要な文字列を取得できます。

図 3: この図は、Google での 2 つのメソッドの操作を示しています。

時間、分、秒がすべて 10 を超える場合、表示される結果の 文字列とデータ長は一致しています

図 4: この図は、IE11 での 2 つのメソッドの操作を示しています。時、分、秒が 10 を超えると、表示される

結果文字列は同じになります。 実際には、それらは異なります 2 つの長さの違いは、toLocaleTimeString() にスペースが追加されているためです。 図 5: この図は、Google で 2 つのメソッド間で substr(index, length) を実行した状況を示しています。データ の長さは一貫しているため

によって取得される文字列は同じです

図 6: この図は、IE11 での 2 つのメソッドによる substr(index, length) の操作を示しています。 データ の長さが一貫していないため 、取得される文字列も異なります

最後に、個別に取得した時、分、秒、つまり getHours()、getMinutes()、getSeconds() の 3 つのメソッドで取得した結果が「10」未満であれば、他の形式の違いはありますが、必要な場合にそれを補うだけです

りー

以上がtoLocaleTimeString() メソッドに存在する問題の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。