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 相关文章推荐
支持oicq头像的留言簿(一)
Oct 09 PHP
php对大文件进行读取操作的实现代码
Jan 23 PHP
php打开远程文件的方法和风险及解决方法
Nov 12 PHP
PHP多线程之内部多线程实例分析
Mar 09 PHP
学习php设计模式 php实现策略模式(strategy)
Dec 07 PHP
php 指定范围内多个随机数代码实例
Jul 18 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
Aug 17 PHP
php 的反射详解及示例代码
Aug 25 PHP
php array_udiff_assoc 计算两个数组的差集实例
Nov 12 PHP
Yii2框架可逆加密简单实现方法
Aug 25 PHP
Laravel源码解析之路由的使用和示例详解
Sep 27 PHP
laravel框架中表单请求类型和CSRF防护实例分析
Nov 23 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微信模板消息操作示例
2017/06/29 PHP
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
JavaScript分页功能的实现方法
2015/04/25 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
2015/08/12 Javascript
jQuery实现带渐显效果的人物多级关系图代码
2015/10/16 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
2016/01/23 Javascript
JavaScript实现点击单元格改变背景色的方法
2016/02/12 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
2016/05/05 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
JQuery实现DIV其他动画效果的简单实例
2016/09/18 Javascript
js与jquery分别实现tab标签页功能的方法
2016/11/18 Javascript
老生常谈原生JS执行环境与作用域
2016/11/22 Javascript
javascript帧动画(实例讲解)
2017/09/02 Javascript
javascript将json格式数组下载为excel表格的方法
2017/12/22 Javascript
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
2017/12/27 Javascript
webpack里使用jquery.mCustomScrollbar插件的方法
2018/05/30 jQuery
JavaScript中变量提升和函数提升的详解
2020/08/07 Javascript
JavaScript数组类型Array相关的属性与方法详解
2020/09/08 Javascript
[03:11]DOTA2上海特锦赛小组赛第一日recap精彩回顾
2016/02/28 DOTA
Python中处理字符串的相关的len()方法的使用简介
2015/05/19 Python
python3利用Socket实现通信的方法示例
2019/05/06 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
2020/03/19 Python
python3.7调试的实例方法
2020/07/21 Python
FORZIERI澳大利亚站:全球顶级奢华配饰精品店
2016/12/31 全球购物
印尼购物网站:iLOTTE
2019/10/16 全球购物
T3官网:头发造型工具
2019/12/26 全球购物
java程序员面试交流
2012/11/29 面试题
日语求职信范文
2013/12/17 职场文书
改作风抓落实促发展心得体会
2014/09/10 职场文书
2014年学习厉行节约反对浪费思想汇报
2014/09/10 职场文书
2014年企业员工工作总结
2014/12/09 职场文书
肖申克的救赎观后感
2015/06/02 职场文书
2015年防灾减灾工作总结
2015/07/24 职场文书
2016公司中秋节寄语
2015/12/07 职场文书
Pytorch 统计模型参数量的操作 param.numel()
2021/05/13 Python
SQL语句中JOIN的用法场景分析
2021/07/25 SQL Server