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 相关文章推荐
自己动手做一个SQL解释器
Oct 09 PHP
dedecms中使用php语句指南
Nov 13 PHP
支持中文的PHP按字符串长度分割成数组代码
May 17 PHP
php抽象类用法实例分析
Jul 07 PHP
WordPress中用于检索模版的相关PHP函数使用解析
Dec 15 PHP
php中preg_replace正则替换用法分析【一次替换多个值】
Jan 17 PHP
详谈php ip2long 出现负数的原因及解决方法
Apr 05 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
Aug 01 PHP
PHP实现的超长文本分页显示功能示例
Jun 04 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
Jun 20 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
Feb 15 PHP
PHP explode()函数用法讲解
Feb 15 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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
php str_replace的替换漏洞
2008/03/15 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
PHP实现腾讯短网址生成api接口实例
2020/12/08 PHP
JS面向对象编程浅析
2011/08/28 Javascript
IE的fireEvent方法概述及应用
2013/02/22 Javascript
IE8对JS通过属性和数组遍历解析不一样的地方探讨
2013/05/06 Javascript
JS防止用户多次提交的简单代码
2013/08/01 Javascript
js获取location.href的参数实例代码
2013/08/02 Javascript
jQuery实现列表自动循环滚动鼠标悬停时停止滚动
2013/09/06 Javascript
jquery改变tr背景色的示例代码
2013/12/28 Javascript
Javascript实现的Map集合工具类完整实例
2015/07/31 Javascript
JavaScript中日期的相关操作方法总结
2015/10/24 Javascript
一道常被人轻视的web前端常见面试题(JS)
2016/02/15 Javascript
js实现统计字符串中特定字符出现个数的方法
2016/08/02 Javascript
JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法
2016/08/19 Javascript
手机端图片缩放旋转全屏查看PhotoSwipe.js插件实现
2016/08/25 Javascript
jQuery下拉菜单的实现代码
2016/11/03 Javascript
通俗易懂地解释JS中的闭包
2017/10/23 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
2019/05/08 Javascript
带你使用webpack快速构建web项目的方法
2020/11/12 Javascript
python基础教程之基本内置数据类型介绍
2014/02/20 Python
Python 3.x 新特性及10大变化
2015/06/12 Python
django使用xlwt导出excel文件实例代码
2018/02/06 Python
python2.7读取文件夹下所有文件名称及内容的方法
2018/02/24 Python
情人节快乐! python绘制漂亮玫瑰
2020/08/18 Python
python matplotlib折线图样式实现过程
2019/11/04 Python
python 连续不等式语法糖实例
2020/04/15 Python
解决Python安装cryptography报错问题
2020/09/03 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
2021/01/08 Python
python 实现IP子网计算
2021/02/18 Python
澳大利亚的奢侈品牌:Oroton
2016/08/26 全球购物
澳大利亚礼品卡商店:Gift Card Store
2019/06/24 全球购物
机械专业毕业生自荐信
2013/11/02 职场文书
幼儿园爱国卫生月活动总结
2014/06/30 职场文书
教师个人事迹材料
2014/12/17 职场文书