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 相关文章推荐
第十节 抽象方法和抽象类 [10]
Oct 09 PHP
特详细的PHPMYADMIN简明安装教程
Aug 01 PHP
PHP 第一节 php简介
Apr 28 PHP
php根据日期判断星座的函数分享
Feb 13 PHP
ThinkPHP框架安全实现分析
Mar 14 PHP
php短信接口代码
May 13 PHP
php微信公众号开发之翻页查询
Oct 20 PHP
php中如何执行linux命令详解
Nov 06 PHP
PHP抽象类基本用法示例
Dec 28 PHP
PHP chr()函数讲解
Feb 11 PHP
浅谈php的TS和NTS的区别
Mar 13 PHP
laravel框架中控制器的创建和使用方法分析
Nov 23 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
使用PHP的日期与时间函数技巧
2008/04/24 PHP
php数组函数序列之array_sum() - 计算数组元素值之和
2011/10/29 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
2014/06/19 PHP
PHP中把对象转换为关联数组代码分享
2015/04/09 PHP
php获取本机真实IP地址实例代码
2016/03/31 PHP
PHP实现微信提现(企业付款到零钱)
2019/08/01 PHP
picChange 图片切换特效的函数代码
2010/05/06 Javascript
js禁止回车提交表单的示例代码
2013/12/23 Javascript
css结合js制作下拉菜单示例代码
2014/02/27 Javascript
Jquery原生态实现表格header头随滚动条滚动而滚动
2014/03/18 Javascript
javascript中的遍历for in 以及with的用法
2014/12/22 Javascript
ajax+jQuery实现级联显示地址的方法
2015/05/06 Javascript
Centos7 中安装 Node.js v4.4.4
2016/11/03 Javascript
获取JavaScript异步函数的返回值
2016/12/21 Javascript
微信小程序中页面FOR循环和嵌套循环
2017/06/21 Javascript
vue2利用Bus.js如何实现非父子组件通信详解
2017/08/25 Javascript
jQuery实现的手动拖动控制进度条效果示例【测试可用】
2018/04/18 jQuery
微信小程序和H5页面间相互跳转代码实例
2019/09/19 Javascript
JavaScript正则表达式验证登录实例
2020/03/18 Javascript
跟老齐学Python之从if开始语句的征程
2014/09/14 Python
python实现斐波那契数列的方法示例
2017/01/12 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
2018/05/11 Python
Window 64位下python3.6.2环境搭建图文教程
2018/09/19 Python
PyCharm 设置SciView工具窗口的方法
2019/01/15 Python
Python-ElasticSearch搜索查询的讲解
2019/02/25 Python
django迁移数据库错误问题解决
2019/07/29 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
基于Python实现扑克牌面试题
2019/12/11 Python
使用TensorFlow对图像进行随机旋转的实现示例
2020/01/20 Python
利用Tensorflow的队列多线程读取数据方式
2020/02/05 Python
可能这些是你想要的H5软键盘兼容方案(小结)
2019/04/23 HTML / CSS
一套中级Java程序员笔试题
2015/01/14 面试题
群众路线学习笔记范文
2014/11/06 职场文书
2014年学校安全工作总结
2014/11/13 职场文书
彻底理解golang中什么是nil
2021/04/29 Golang
Python加密技术之RSA加密解密的实现
2022/04/08 Python