php实时倒计时功能实现方法详解


Posted in PHP onFebruary 27, 2017

本文实例讲述了php实时倒计时功能实现方法。分享给大家供大家参考,具体如下:

这几天公司要做一个限时购物的功能.这就要做到倒计时,要有实时的倒计时.

要求:

1) 要有小时分钟秒的实时倒计时的显示
2)用户端修改日期时间不会影响到倒计时的正常显示(也就是以服务器时间为准)

其实这和很多的考试等系统的时间限制功能同样的要求.

解决思路:

1)总不能用ajax每秒都获取服务器时间吧.

所以实时倒计时一定要用javascript实现.这很简单.网上一大把的例子.

2)现在问题是解决用户端修改日期时间对我们的显示的影响.
解决的办法是计算出用户端的时间和服务器的时间差.这样问题的完成解决了.

这样只需要运行一次php.实时倒计时的时间就和服务器的时间同步了.

理论是同步的,但实际测试会有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:

修改了上面的一些bug

代码:

<?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生成静态页面详解
Nov 19 PHP
在PHP中养成7个面向对象的好习惯
Jul 17 PHP
PHPThumb PHP 图片缩略图库
Mar 11 PHP
不使用php api函数实现数组的交换排序示例
Apr 13 PHP
Yii学习总结之安装配置
Feb 22 PHP
php生成图片验证码
Jun 09 PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
Jul 14 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 PHP
laravel添加前台跳转成功页面示例
Oct 22 PHP
让whoops帮我们告别ThinkPHP6的异常页面
Mar 02 PHP
PHP设计模式(一)工厂模式Factory实例详解【创建型】
May 02 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
Oct 30 PHP
php自定义截取中文字符串-utf8版
Feb 27 #PHP
PHP读取XML格式文件的方法总结
Feb 27 #PHP
PHP批量修改文件名称的方法分析
Feb 27 #PHP
php基于PDO实现功能强大的MYSQL封装类实例
Feb 27 #PHP
php实现通过soap调用.Net的WebService asmx文件
Feb 27 #PHP
PHP 中使用ajax时一些常见错误总结整理
Feb 27 #PHP
PHP/HTML混写的四种方式总结
Feb 27 #PHP
You might like
Thinkphp使用mongodb数据库实现多条件查询方法
2014/06/26 PHP
PHP使用PHPexcel导入导出数据的方法
2015/11/14 PHP
php 根据自增id创建唯一编号类
2017/04/06 PHP
JQuery困惑—包装集 DOM节点
2009/10/16 Javascript
javascript针对DOM的应用分析(四)
2012/04/15 Javascript
js对象内部访问this修饰的成员函数示例
2014/04/27 Javascript
jQuery中:password选择器用法实例
2015/01/03 Javascript
在JS方法中返回多个值的方法汇总
2015/05/20 Javascript
Jquery数字上下滚动动态切换插件
2015/08/08 Javascript
easyui-datagrid特殊字符不能显示的处理方法
2017/04/12 Javascript
Javascript实现时间倒计时效果
2017/07/15 Javascript
jQuery实现遍历XML节点和属性的方法示例
2018/04/29 jQuery
vue组件实现可搜索下拉框扩展
2020/10/23 Javascript
webpack css加载和图片加载的方法示例
2018/09/11 Javascript
vue实现多条件和模糊搜索功能
2019/05/28 Javascript
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
2019/07/19 Javascript
Vue性能优化的方法
2020/07/30 Javascript
用python删除java文件头上版权信息的方法
2014/07/31 Python
使用Python &amp; Flask 实现RESTful Web API的实例
2017/09/19 Python
Python定义函数功能与用法实例详解
2019/04/08 Python
Python编程实现tail-n查看日志文件的方法
2019/07/08 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
深入浅析Python 函数注解与匿名函数
2020/02/24 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
2020/02/29 Python
python实现最速下降法
2020/03/24 Python
一文彻底解决HTML5页面中长按保存图片功能
2019/06/10 HTML / CSS
乐高积木玩具美国官网:LEGO Shop US
2016/09/16 全球购物
英国最大的笔记本电脑直销专家:Laptops Direct
2019/07/20 全球购物
小学清明节活动方案
2014/03/08 职场文书
求职意向书范文
2014/04/01 职场文书
网络技术专业求职信
2014/05/02 职场文书
帮一个朋友写的求职信
2014/08/09 职场文书
2015年父亲节寄语
2015/03/23 职场文书
2015年行政人事部工作总结
2015/05/13 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js
Python3使用Qt5来实现简易的五子棋小游戏
2022/05/02 Python