当前位置:首页 » PHP技术

PHP实例实现剩余时间倒计时显示

2011-05-21 11:09 本站整理 浏览(12593)

现在很多的团购网站上都有剩余时间的显示。显示剩余时间可以使用Javascript来实现,但是我们会发现使用Javascript来实现的话不安全,因为Javascript获取的是客户端的时间。比方说,这次团购已经结束了,但是懂技术的访客只要修改他客户端电脑的时间就又显示该商品还可以购买。很明显,这不是我们网站设计的初衷。团购结束了就不可以再购买啦。这里豆芽今天写了一个考试系统剩余时间倒计时的显示代码和大家一起探讨。
这里豆芽不使用Javascript来实现,我们使用PHP来实现。
实现原理:PHP获取的是服务器端的时间,我们只要设置考试的开始时间和结束时间。如果当前的时间不在我们的考试时间范围内,则显示给考生“当前不在考试时间段!”。如果在考试时间范围内,则获取当前时间,结束时间减掉当前时间就是剩余的时间,将剩余时间格式化输出就是“剩余考试时间:2小时56分32秒”这样的形式。服务器端获得了剩余时间后,我们还要在客户端动态的显示剩余时间的倒计时。这就需要用AJAX来实现了。在开始前大家先熟悉几个函数吧!
PHP函数:
strtotime(); //将任何英文日期转换为时间戳
floor();       //舍去法取整,和int()强制转换相识
json_encode() //对变量进行JSON编码,返回字符串
先建立显示剩余时间的HTML页面:
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html;charset=gb2312" />
 <title>PHP实现剩余时间倒计时显示</title>
 <script type="text/javascript" src="./js/ajax.js"></script>
 <style type="text/css">
 <!--
  #hour,#minute,#second{
   color:blue;
  }
 
 //-->
 </style>
</head>


<body>
 考试剩余时间:<span id="hour">00</span>小时<span id="minute">00</span>分<span id="second">00</span>秒
 <script type="text/javascript">
  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){
   //alert(data);
   eval("var dtime = "+data);
   dealData('hour',dtime.hour);
   dealData('minute',dtime.minute);
   dealData('second',dtime.second);
  });
  },1000);
 </script>
</body>
</html>

我们这里包含了一个AJAX对象,这个对象代码豆芽会在Javascript栏目里分享给大家,大家也可以去学习学习,有了这个AJAX对象,你没有必要去看有关AJAX那么很厚的书籍。有这个AJAX对象就够了。上面代码值得注意的是这里:remain_time.php?a="+Math.random() 为什么要在服务器脚本加上一个参数呢?因为IE服务器有缓存,加了一个随机的参数说明我们当前请求的脚本是不同的,这样每次请求都会认为是一个新的页面。window.setInterval()是实现每隔1000毫秒,也就是1秒向服务器脚本发送一次请求,也就达到了剩余时间的秒数每次都减少1的目的,实现了剩余时间的倒计时显示。eval()函数创建了一个新的dtime对象,方便我们获取服务器端响应的数据。
服务器端PHP脚本:
<?php
/*
  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));
?>

考试前先判断是否是在考试的时间段内,如果当前不在考试内,则退出脚本的继续运行。将剩余的秒数转换为多少小时,多少分钟,多少秒大家都晓得吧!这里豆芽就不详细说了。
最后,你只要到本站的Javascript栏目复制那个AJAX对象,单独放到一个JS脚本中,包含到剩余时间显示的页面,就大功告成啦!
上面的代码我这里测试没有问题,你那里测试如果有问题的话,可以留言反馈给我哦!呵呵,豆芽敬上。