PHP でカウントダウンを実装する方法: 1. date_default_timezone_set を使用してタイム ゾーンを設定します; 2. 毎日のアクティビティの期間を構成します; 3. サーバーとクライアント間の時差を計算します; 4. 「関数 GetRTime」を使用します。 (){... }」メソッドを使用してカウントダウンを実装します。
この記事の動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 コンピューター
php はカウントダウンをどのように実装しますか?
phpリアルタイムカウントダウン機能の実装方法の詳細説明
詳細は以下の通りです:
過去数回数日間、会社は期間限定のショッピング機能を導入する予定です。これはカウントダウンとリアルタイムのカウントダウンが必要です。
要件:
1) 本物のショッピング機能が必要です。 -time 時、分、秒のカウントダウン表示
2) クライアントは日付を変更できます。時刻はカウントダウンの通常の表示には影響しません (つまり、サーバー時間に基づきます)
実際、これには多くの試験や他のシステムの時間制限機能と同じ要件があります。
ソリューションのアイデア:
1) ajax は使用できません。サーバー時刻を毎秒取得します。
したがって、リアルタイムのカウントダウンは JavaScript で実装する必要があります。これは非常に簡単です。インターネット上に多くの例があります。
2)現在の問題は、クライアントの日付と時刻の変更がディスプレイに及ぼす影響を解決することです。
解決策は、クライアントの時刻とサーバーの時刻の間の時差を計算することです。これで問題は解決します。
この方法では、php を 1 回実行するだけで済みます。リアルタイムのカウントダウン時間はサーバー時間と同期されます。
理論上は同期されていますが、実際のテストでは 1 秒の誤差が発生します。 (特に、理由はインターネット速度に関連しています。インターネット速度が速いほど、誤差は小さくなります) しかし、これは上記の要件に影響を与えることはありません。 # #コード:
<?php //php的时间是以秒算。js的时间以毫秒算 date_default_timezone_set("Asia/Hong_Kong");//地区 //配置每天的活动时间段 $starttimestr = "09:00:00"; $endtimestr = "18:30:00"; $starttime = strtotime($starttimestr); $endtime = strtotime($endtimestr); $nowtime = time(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>PHP实时倒计时!</title> <script language="JavaScript"> <!-- // var EndTime=<?=$endtime*1000?>; var NowTime = new Date(); //计算出服务器和客户端的时间差。 var dTime = <?=$nowtime*1000?>-NowTime.getTime(); function GetRTime(){ var NowTime = new Date(); var nMS = EndTime - NowTime.getTime()-dTime; var nH=Math.floor(nMS/(1000*60*60)) % 24; var nM=Math.floor(nMS/(1000*60)) % 60; var nS=Math.floor(nMS/1000) % 60; document.getElementById("RemainH").innerHTML=nH; document.getElementById("RemainM").innerHTML=nM; document.getElementById("RemainS").innerHTML=nS; if(nMS>5*59*1000&&nMS<=5*60*1000) { alert("还有最后五分钟!"); } setTimeout("GetRTime()",1000); } window.onload=GetRTime; // --> </script> </head> <body> <h1><strong id="RemainH">XX</strong>:<strong id="RemainM">XX</strong>:<strong id="RemainS">XX</strong></h1> </body> </html>
例 2:上記のバグの一部を修正
コード:
<?php //php的时间是以秒算。js的时间以毫秒算 date_default_timezone_set("Asia/Hong_Kong");//地区 //配置每天的活动时间段 $starttimestr = "09:00:00"; $endtimestr = "18:30:00"; $starttime = strtotime($starttimestr); $endtime = strtotime($endtimestr); $nowtime = time(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>PHP实时倒计时!</title> <script language="JavaScript"> <!-- // var EndTime=<?=$endtime*1000?>; var NowTime = new Date(); //计算出服务器和客户端的时间差。 var dTime = NowTime.getTime()-<?=$nowtime*1000?>; var runtimes = 0; function GetRTime(){ var NowTime = new Date(); var dTimeNew = NowTime.getTime()-<?=$nowtime*1000?>; var dTimesM = Math.abs(Math.floor((dTimeNew-runtimes*1000-dTime)/1000));//客户端时间和服务器当前时间的差 if (dTimesM>1) {//如果用户修改了客户端时间,就重新load本页 window.location.reload(); } var nMS = EndTime - NowTime.getTime()+dTime; var nH=Math.floor(nMS/(1000*60*60)) % 24; var nM=Math.floor(nMS/(1000*60)) % 60; var nS=Math.floor(nMS/1000) % 60; document.getElementById("RemainH").innerHTML=nH; document.getElementById("RemainM").innerHTML=nM; document.getElementById("RemainS").innerHTML=nS; if(nMS>5*59*1000&&nMS<=5*60*1000) { alert("还有最后五分钟!"); } runtimes++; setTimeout("GetRTime()",1000); } window.onload=GetRTime; // --> </script> </head> <body> <h1><strong id="RemainH">XX</strong>:<strong id="RemainM">XX</strong>:<strong id="RemainS">XX</strong></h1> </body> </html>
例 3:
アイデアは異なりますが、はるかにシンプルです。
コード:
<?php //php的时间是以秒算。js的时间以毫秒算 date_default_timezone_set("Asia/Hong_Kong");//地区 //配置每天的活动时间段 $starttimestr = "09:00:00"; $endtimestr = "13:50:00"; $starttime = strtotime($starttimestr); $endtime = strtotime($endtimestr); $nowtime = time(); if ($nowtime<$starttime){ die("活动还没开始,活动时间是:{$starttimestr}至{$endtimestr}"); } $lefttime = $endtime-$nowtime; //实际剩下的时间(秒) ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>PHP实时倒计时!</title> <script language="JavaScript"> <!-- // var runtimes = 0; function GetRTime(){ var nMS = <?=$lefttime?>*1000-runtimes*1000; var nH=Math.floor(nMS/(1000*60*60))%24; var nM=Math.floor(nMS/(1000*60)) % 60; var nS=Math.floor(nMS/1000) % 60; document.getElementById("RemainH").innerHTML=nH; document.getElementById("RemainM").innerHTML=nM; document.getElementById("RemainS").innerHTML=nS; if(nMS>5*59*1000&&nMS<=5*60*1000) { alert("还有最后五分钟!"); } runtimes++; setTimeout("GetRTime()",1000); } window.onload=GetRTime; // --> </script> </head> <body> <h1><strong id="RemainH">XX</strong>:<strong id="RemainM">XX</strong>:<strong id="RemainS">XX</strong></h1> </body> </html>
推奨される学習: 「
PHP ビデオ チュートリアル」
以上がPHPでカウントダウンを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。