Javascript获取服务器系统时间

背景

很多时候,比如有些抽奖、倒计时等应用需要用到时间,但是单纯的 new Date() 获取到的本地时间非常之不可靠,因为任何人都可以很容易的修改,这个时候我们就需要用到系统时间。 通常情况下我们会和服务端约定好一个接口,这个接口用来返回系统时间。其实在实际的项目中,这个接口可以省略,我们可以通过另外一种方法获取服务器的时间。

相关技术

如果你熟悉HTTP编程一定会想到什么,对!就是HTTP头。

通常情况下,http头中包含了很多有用的信息,如下面是百度首页的HTTP头:

HTTP/1.1 200 OK
Date: Tue, 24 Jun 2014 09:29:29 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: Keep-Alive
Set-Cookie: BDRCVFR[Y7OWRVY3J9s]=I67x6TjHwwYf0; path=/; domain=.baidu.com
Set-Cookie: BDSVRTM=92; path=/
Set-Cookie: H_PS_PSSID=1468_7236_7157_7254; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Cache-Control: private
Expires: Tue, 24 Jun 2014 09:29:29 GMT
Content-Encoding: gzip
Server: BWS/1.1
BDPAGETYPE: 2
BDQID: 0xd4c3d37f00019464
BDUSERID: 29250924

这里我们关注一下 Date 这个字段,如果有办法取到这个字段,一切都好办了!

那么我们要怎么取呢?

很简单,通过xmlhttp对象的 getResponseHeader('Date') 方法

实现

现在,我们知道方法之后,就很好办了。

首先我们向服务器发送一条请求(AJAX),然后取出响应头的 Date 字段,大功告成!

我把这个过程封装成了一个小插件: sysDate

感兴趣的可以去查看源码

使用起来也很方便

var a=sysDate(option);

// 可选字段option, {'url':'/getDate'}
a.done(function(data){
    console.log('done',data);
    // 服务器时间 data 1385003673000'
});

同时它也支持异步调用(有点promise的感觉)

var a=sysDate();

//这里你还以把回调写在异步里面
//等待了3秒钟,然后再去注册done事件,同样有效,是不是很神奇?
setTimeout(function(){
  a.done(function(data){
    console.log('done',data);
    //it will return 'done 1385003673000'
  });
},3000)

下载和源码

感兴趣的同学可以点击这里获取源码,记得start哦 :)

109980
  • logo
    • HI, THERE!I AM MOFEI

      (C) 2010-2024 Code & Design by Mofei

      Powered by Dufing (2010-2020) & Express

      IPC证:沪ICP备2022019571号-1