モバイルエンドのカウントダウンが無効になった問題について

5358 ワード

プロジェクトでは、カウントダウンタイムが失効するという問題に遭遇し、昼のうちに暇をつぶして、まとめてみました.
バックグラウンドからカウントダウンの締め切り時間を取得し、フロントエンドで現在の日付を取得し、減算し、それぞれ取得した場合、分、秒で解決する2つの解決策があります.コードは以下の通りです.
              1,        end           
              2,      now
             var leftTime = end - now; //         
           
                var  h= "00";
                var m = "00";
                 var s="00";
                if(leftTime >= 0) {
                    h = Math.floor(leftTime / 1000 / 60 / 60 % 24);
                    m = Math.floor(leftTime / 1000 / 60 % 60);
                    s = Math.floor(leftTime / 1000 % 60);
                    if(s < 10) {
                        s = "0" + s;
                    }
                    if(m < 10) {
                        m = "0" + m;
                    }
                } else {
                    console.log('   ')
                }
                //       div 
                document.getElementById("_h").innerHTML = h ;
                document.getElementById("_m").innerHTML = m ;
                document.getElementById("_s").innerHTML = s ;

第2の方法は、フロントエンドが解決できればバックグラウンドに迷惑をかけないという考えに基づいて、自分で時間を処理しました.(フロントエンドはもともと対応できるのですが、Dateの対象があるのではないでしょうか).あまり言わないで、直接コードをつけます.
function countTime() {
                var date = new Date();
                var now = date.getTime();   
                var dateTime = date.getDate();
                var hoursTime = date.getHours();
                var endDate = new Date("2018-06-02 09:00:00");
                var end = endDate.getTime();
                var leftTime = end - now; //         
                if(dateTime<=26 && dateTime>=3){          
                        var leftTime = -1;
                }
                if(dateTime == 26 && hoursTime >=9){
                     var leftTime = end - now; //     
                }
                var  h= "00";
                var m = "00";
                 var s="00";
                if(leftTime >= 0) {
                    h = Math.floor(leftTime / 1000 / 60 / 60 % 24);
                    m = Math.floor(leftTime / 1000 / 60 % 60);
                    s = Math.floor(leftTime / 1000 % 60);
                    if(s < 10) {
                        s = "0" + s;
                    }
                    if(m < 10) {
                        m = "0" + m;
                    }
                } else {
                    console.log('   ')
                }
                //       div 
                document.getElementById("_h").innerHTML = h ;
                document.getElementById("_m").innerHTML = m ;
                document.getElementById("_s").innerHTML = s ;
                setTimeout(countTime, 50);
           
   }
 countTime();

しかし、プロジェクトがオンラインになったとき、問題が発生し、PC側ではシミュレーションを含めてカウントダウンが可能であることが分かったが、モバイル側では
00:00:00

しかし、PC側では可能です.
そこで、資料を調べてみると、safariがサポートしていた問題が発見されました.
safariではJavaScriptのnew Date関数のサポートについて奇妙な問題がある.
通常、SQLのdatetimeフォーマットに慣れているため、日付はyyyy-mm-ddと打つフォーマットですが、safariはこのようなフォーマットをサポートしていないので、次の文を入力すると空の時間を返します.
var endDate = new Date("2018-06-02 09:00:00");

空の時間を返します.だから自然に00:00:00です.
Safariでサポートされているフォーマットはyyyy/mm/ddのようなもので、主に短横棒とスラッシュ/の違いがありますが、スラッシュのようなフォーマットは他の一般的なブラウザでも正常に動作するので、スラッシュに置き換えるだけでいいので、変換関数は以下のようになります.
new Date('2016-04-17'.replace(/-/g, "/"));

上記のコードを次のように変更します.
var endDate = new Date("2018/06/02 09:00:00");

コードをアップロードした後.正常に動作しています.バグを完璧に解決する.
                                                                      
 
転載先:https://juejin.im/post/5b0b8ae26fb9a009f74be74d