php实现倒计时效果


Posted in PHP onDecember 19, 2015

现在很多的团购网站上都有剩余时间的显示。显示剩余时间可以使用Javascript来实现,但是我们会发现使用Javascript来实现的话不安全,因为Javascript获取的是客户端的时间。比方说,这次团购已经结束了,但是懂技术的访客只要修改他客户端电脑的时间就又显示该商品还可以购买。很明显,这不是我们网站设计的初衷。团购结束了就不可以再购买啦。这里写了一个考试系统剩余时间倒计时的显示代码和大家一起探讨。

实现原理:
PHP获取的是服务器端的时间,我们只要设置考试的开始时间和结束时间及当前时间。如果当前的时间不在我们的考试时间范围内,则显示给考生“当前不在考试时间段!”。如果在考试时间范围内,则获取当前时间,结束时间减掉当前时间就是剩余的时间,将剩余时间格式化输出就是“剩余考试时间:2小时56分32秒”这样的形式。服务器端获得了剩余时间后,我们还要在客户端动态的显示剩余时间的倒计时。这就需要用AJAX来实现了。在开始前大家先熟悉几个函数吧!

PHP函数:
strtotime(); //将任何英文日期转换为时间戳
floor(); //舍去法取整,和int()强制转换相识
json_encode() //对变量进行JSON编码,返回字符串

简单的剩余天数计算:

date_default_timezone_set('Asia/Hong_Kong');
$startDate = '2015-8-11';
$endDate = '2015-8-31';

// 将日期转换为Unix时间戳
$startDateStr = strtotime($startDate);
$endtDateStr = strtotime($endDate);
$total = $endtDateStr-$startDateStr;

$now = strtotime(date('Y-m-d'));
$remain = $endtDateStr-$now;

echo '为期:'.$total/(3600*24).'天<br>';
echo '剩余:'.$remain/(3600*24).'天';

效果:

php实现倒计时效果

简单的剩余时间计算:

date_default_timezone_set('Asia/Hong_Kong');
$startTime = '09:00:00';
$endTime = '18:00:00';

// 将时间转化为unix时间戳
$startTimeStr = strtotime($startTime);
$endTimeStr = strtotime($endTime);
$total = $endTimeStr - $startTimeStr;

$restHours = 1; // 休息1小时

$now = strtotime(date('H:i:s'));
$remain = $endTimeStr - $now;

echo '上班时间:'.($total/3600-$restHours).'小时<br>';
echo '还有:'.floor(($remain/3600)).'小时'.floor($remain/60).'分钟下班';

效果:

php实现倒计时效果

前后端配合实现考试剩余时间:

HTML布局

考试剩余时间:

<span id="hour">00</span>小时<span id="minute">00</span>分<span id="second">00</span>秒

JS脚本

function dealData(id,value){
  var place = document.getElementById(id);
  place.innerHTML = value;
}
window.setInterval(function(){ // 每秒从服务器取一次数据
  var ajax = new Ajax();
  ajax.get("remain_time.php?a="+Math.random(),function(data){
  eval("var dtime = "+data); 
  dealData('hour',dtime.hour);
  dealData('minute',dtime.minute);
  dealData('second',dtime.second);
 });
},1000);

PHP代码:

date_default_timezone_set('PRC');
$start_time = '09:00:00';
$end_time = '18:00:00';
$start_famate_time = strtotime($start_time);//开始时间转化为时间戳
$end_famate_time = strtotime($end_time); //结束时间转化为时间戳
$now_time = time();
if($end_famate_time < $now_time || $start_time > $now_time){
 echo '当前不在考试的时间范围内!';
 exit;
}
$remain_time = $end_famate_time-$now_time; //剩余的秒数
$remain_hour = floor($remain_time/(60*60)); //剩余的小时
$remain_minute = floor(($remain_time - $remain_hour*60*60)/60); //剩余的分钟数
$remain_second = ($remain_time - $remain_hour*60*60 - $remain_minute*60); //剩余的秒数
echo json_encode(array('hour'=>$remain_hour,'minute'=>$remain_minute,'second'=>$remain_second));

以上就是php实现倒计时的关键代码,希望对大家的学习有所帮助。

PHP 相关文章推荐
php简单静态页生成过程
Mar 27 PHP
改写ThinkPHP的U方法使其路由下分页正常
Jul 02 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
Jul 05 PHP
PHP中array_slice函数用法实例详解
Nov 25 PHP
php中最简单的字符串匹配算法
Dec 16 PHP
PHP中的事务使用实例
May 26 PHP
php的api数据接口书写实例(推荐)
Sep 22 PHP
php获取数据库中数据的实现方法
Jun 01 PHP
万能的php分页类
Jul 06 PHP
PHP设计模式之工厂模式详解
Oct 24 PHP
在laravel中实现事务回滚的方法
Oct 10 PHP
PHP连接MySQL数据库三种实现方法
Dec 10 PHP
Thinkphp实现自动验证和自动完成
Dec 19 #PHP
详解WordPress中过滤链接与过滤SQL语句的方法
Dec 18 #PHP
基于ThinkPHP实现批量删除
Dec 18 #PHP
thinkphp实现163、QQ邮箱收发邮件的方法
Dec 18 #PHP
WordPress中注册菜单与调用菜单的方法详解
Dec 18 #PHP
讲解WordPress开发中一些常用的debug技巧
Dec 18 #PHP
详解WordPress中给链接添加查询字符串的方法
Dec 18 #PHP
You might like
PHP程序61条面向对象分析设计的经验小结
2008/11/12 PHP
php中__destruct与register_shutdown_function执行的先后顺序问题
2014/10/17 PHP
PHP提高编程效率的20个要点
2015/09/23 PHP
weiphp微信公众平台授权设置
2016/01/04 PHP
thinkPHP5框架设置404、403等http状态页面的方法
2018/06/05 PHP
Yii框架组件的事件机制原理与用法分析
2020/04/07 PHP
PHP实现本地图片转base64格式并上传
2020/05/29 PHP
JavaScript类和继承 prototype属性
2010/09/03 Javascript
选择器中含有空格在使用示例及注意事项
2013/07/31 Javascript
seaJs的模块定义和模块加载浅析
2014/06/06 Javascript
基于 Docker 开发 NodeJS 应用
2014/07/30 NodeJs
JavaScript字符串对象fromCharCode方法入门实例(用于把Unicode值转换为字符串)
2014/10/17 Javascript
javascript获取重复次数最多的字符
2015/07/08 Javascript
基于Javascript实现返回顶部按钮
2016/02/29 Javascript
Angularjs 动态添加指令并绑定事件的方法
2017/04/13 Javascript
基于ES6作用域和解构赋值详解
2017/11/03 Javascript
jquery中为什么能用$操作
2019/06/18 jQuery
JS实现商品橱窗特效
2020/01/09 Javascript
[45:38]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第一局
2016/03/02 DOTA
Python合并字符串的3种方法
2015/05/21 Python
Pycharm学习教程(5) Python快捷键相关设置
2017/05/03 Python
Django实现一对多表模型的跨表查询方法
2018/12/18 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
2019/01/30 Python
python实现QQ空间自动点赞功能
2019/04/09 Python
Django中ORM外键和表的关系详解
2019/05/20 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
2019/06/21 Python
基于python二叉树的构造和打印例子
2019/08/09 Python
python3代码输出嵌套式对象实例详解
2020/12/03 Python
HTML5 Canvas API中drawImage()方法的使用实例
2016/03/25 HTML / CSS
秋游活动策划方案
2014/02/16 职场文书
化妆品店促销方案
2014/02/24 职场文书
网络技术专业求职信
2014/05/02 职场文书
2015年七一建党节活动总结
2015/03/20 职场文书
2019个人工作总结
2019/06/21 职场文书
使用canvas实现雪花飘动效果的示例代码
2021/03/30 HTML / CSS
浅谈如何提高PHP代码质量之单元测试
2021/05/28 PHP