不消耗服务器资源,即时获取服务器时间

浏览:1940 发布日期:2015/03/06 分类:技术分享 关键字: 服务器 时间戳 setInterval
  原理很简单,一次性获取服务器时间戳,或当页面刷新时,重新获取服务器时间戳,交由前端 html 页面,让页面使用 javascript 的 setInterval 函数设置 每秒 将获取到的服务器时间戳 自加 1 ,这样就实现了 走秒的效果!有点取巧,但只要实现效果就行。而且还可以用作一些定时任务,比如到几点刷新页面等等!!

  当然,会因为一些过程,会比真正的服务器时间慢 0.3--0.5 秒,但这影响不大。如果有大牛可以改进方法,请共享出来一起学习。

1、服务器端输出时间戳$this -> assign('nowstime', time());2、html页面,将获取的 时间戳 通过 javascript 函数 转换 时间格式 并实现 走秒 效果(代码来源于网络,借鉴后修改而成):<!--输出服务器时间-->
<script src="./jquery.js"></script>
<script src="./timeformat.js"></script>
<script>
    var stime = "{$nowstime}";    //此处必须加上 引号,将时间戳 赋值给 javascript 变量
    function maketotime(){
        stime++;
        var Otime = new Date(parseInt(stime) * 1000);
        $("#showtime").html(Otime.pattern("yyyy-MM-dd EEE HH:mm:ss"));
    }
    setInterval(maketotime,1000);
</script>
<div id="showtime"></div>
  获取 文档 id 节点,也可以直接使用 javascrip ,而不必 引入 jquery.js 了。

3、为了代码简洁,处理时间格式的函数直播封装成 timeformat.js 文件了。

  文件 timeformat.js 的内容:/**
 * 对Date的扩展,将 Date 转化为指定格式的String
 * 月(M)、日(d)、12小时(h)、24小时(H)、分(m)、秒(s)、周(E)、季度(q) 可以用 1-2 个占位符
 * 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
 * eg:
 * (new Date()).pattern("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
 * (new Date()).pattern("yyyy-MM-dd E HH:mm:ss") ==> 2009-03-10 二 20:09:04
 * (new Date()).pattern("yyyy-MM-dd EE hh:mm:ss") ==> 2009-03-10 周二 08:09:04
 * (new Date()).pattern("yyyy-MM-dd EEE hh:mm:ss") ==> 2009-03-10 星期二 08:09:04
 * (new Date()).pattern("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
 */
Date.prototype.pattern=function(fmt) {
    var o = {
        "M+" : this.getMonth()+1,        //月份
        "d+" : this.getDate(),            //日
        "h+" : this.getHours()%12 == 0 ? 12 : this.getHours()%12,        //小时
        "H+" : this.getHours(),            //小时
        "m+" : this.getMinutes(),        //分
        "s+" : this.getSeconds(),        //秒
        "q+" : Math.floor((this.getMonth()+3)/3), //季度
        "S" : this.getMilliseconds()    //毫秒
    };
    var week = {
        "0" : "日",
        "1" : "一",
        "2" : "二",
        "3" : "三",
        "4" : "四",
        "5" : "五",
        "6" : "六"
    };
    if(/(y+)/.test(fmt)){
        fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
    }
    if(/(E+)/.test(fmt)){
        fmt=fmt.replace(RegExp.$1, ((RegExp.$1.length>1) ? (RegExp.$1.length>2 ? "星期" : "周") : "")+week[this.getDay()+""]);
    }
    for(var k in o){
        if(new RegExp("("+ k +")").test(fmt)){
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
        }
    }
    return fmt;
}
//var date = new Date();
//window.alert(str.pattern("yyyy-MM-dd hh:mm:ss"));
最佳答案
评论( 相关
后面还有条评论,点击查看>>