VIP用户交流群:462197261热门标签收藏本站北冥有鱼 互联网前沿资源第一站 助力全行业互联网+
在线客服:78895949
  • 当前位置:
  • php实时倒计时功能实现方法详解

    教程大全 2019年11月13日 关键词:,,,

    本文实例讲述了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>
    
    

    PS:这里再为大家推荐几款时间及日期相关工具供大家参考使用:

    在线日期/天数计算器:
    http://tools.jb51.net/jisuanqi/date_jisuanqi

    在线日期计算器/相差天数计算器:
    http://tools.jb51.net/jisuanqi/datecalc

    在线日期天数差计算器:
    http://tools.jb51.net/jisuanqi/onlinedatejsq

    Unix时间戳(timestamp)转换工具:
    http://tools.jb51.net/code/unixtime

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《php日期与时间用法总结》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

    希望本文所述对大家PHP程序设计有所帮助。


    广而告之:
    热门推荐:
    DataGridView展开与收缩功能实现

    很多数据都有父节点与子节点,我们希望单击父节点的时候可以展开父节点下的子节点数据。 比如一个医院科室表,有父科室与子科室,点击父科室后,在父科室下面可以展现该科室下的所有子科室。 我们来说一下在DataGridView中如何实现这个功能。 首先,创建示例数据: 示例数据SQL···

    php中处理模拟rewrite 效果

    php中处理模拟rewrite 效果<?php $Php2Html_FileUrl = $_SERVER["REQUEST_URI"]; $Php2Html_UrlString = str_replace("/", "", strrchr($Php2Html_FileUrl, "/")); ?> <?php $sid=intval(intval($Php2Html_UrlString))···

    微信小程序官方动态自定义底部tabBar的例子

    最近在做小程序的项目,由于用户需求在进入页面时进行选则角色,然后再进入小程序,这时看到的底部菜单看到的不一样,而我们都知道原生的tabBar是不支持这种做法的。在网上搜集了海量资料后发现无非两种解决方法:1.是建立模板,可是会有不能忍受的抖动;2.是利用小程序的组件开···

    elementUI select组件使用及注意事项详解

    elementUI select组件使用详解 动态生成option选项 option选项绑定对应的文本值和value值 作为表单项目,新增、编辑功能 对选项改变后触发相关事件 <div id="app"> <el-form :model="form" ref="form" label-width="100px" class="demo-ruleForm"> <el···

    MySQL ALTER语法的运用方法

    以下的文章主要介绍的是MySQL ALTER语法的实际运用,我们大家都知道MySQL ALTER语法在实际应用中的比例还是很大的,所以了解一下MySQL ALTER语法的实际运用可以很好的选择。 MySQL ALTER语法中ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec ...] 复制代码 代···

    PHP实现简单汉字验证码

    现在越来越多的网站都开始使用汉字验证码了,既增加了我们国人的亲切感,同时也增加了机器破解的难度,这里我就简单粗暴的说一下。。。 创建背景画布 $image = imagecreatetruecolor(200, 60); $background = imagecolorallocate($image, 255, 255, 255); imagefill($image, 0···

    细说CSS中margin属性的使用

    本文着重描述关于 margin,我们日常不太容易发现的“坑”。 盒模型 接触过 CSS 的人应该都知道 CSS 的盒模型: 由内容边缘(Content edge)包围形成的是内容盒(Content Box),类推还有内边距盒(Padding Box)、边框盒(Border Box)、外边距盒(Margin Box)。其···

    php 分页函数multi() discuz

    复制代码 代码如下:/* * 分页函数 * $num 总条数,$perpage 一页多少条, $curpage 当前页, $mpurl url, $page = 10 显示几个分页 * */ function multi($num, $perpage, $curpage, $mpurl, $page = 10) { $multipage = ''; $realpages = 1; if ($num > $perpage){ $offs···

    使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)

    写在前面 之前写过一篇关于vue实现dialog会话框组件的文章//www.jb51.net/article/139218.htm  讲到了如何实现一个vue对话框组件,其中涉及到了父组件和子组件的通信,这个不用多说,看我之前的文章就能明白,文章最后也说到了,我们可以使用slot插槽来编写组件,slot用来···

    学习使用bootstrap的modal和carousel

    bootstrap框架提供了很多好用的javascript组件,可以很方便的实现常用的js效果,比如点击弹出一个div(modal)、下拉菜单、旋转木马(carousel或slider),非常适合前端不专业的后端程序员使用。下面就来看下modal和carousel如何使用。 modal即点击弹出div的效果,先看下效果图···