이 기사의 예에서는 PHP에서 실시간 카운트다운 기능을 구현하는 방법을 설명합니다. 참고하실 수 있도록 모든 사람과 공유하세요. 자세한 내용은 다음과 같습니다.
지난 며칠 동안 회사에서 기간 한정 쇼핑 기능을 선보일 예정입니다. 이를 위해서는 카운트다운과 실시간 기능이 필요합니다. 카운트다운.
요구 사항:
1) 시, 분, 초의 실시간 카운트다운이 표시되어야 합니다
2) 날짜 및 시간 수정 클라이언트 측은 카운트다운의 정상적인 표시(즉, 서버 시간 기준)에 영향을 미치지 않습니다. 제목)
사실 이는 많은 검사 및 기타 시스템의 시간 제한 기능과 동일한 요구 사항을 갖습니다.
솔루션 아이디어:
1) 불가능합니다. ajax를 사용하여 매초마다 서버 시간을 가져옵니다.
그래서 실시간 카운트다운은 다음과 같습니다. 이것은 매우 간단합니다. 인터넷에 많은 예제가 있습니다.
2) 이제 문제는 클라이언트 측에서 문제를 해결하는 것입니다. 디스플레이의 날짜와 시간 수정이 미치는 영향. .
해결책은 클라이언트 시간과 서버 시간의 시간 차이를 계산하는 것입니다.
이런 방법으로 실시간 카운트다운을 한 번만 실행하면 됩니다.
이론적으로는 동기화되지만 실제 테스트에서는 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>