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哦 :)
114600
HI, THERE!I AM MOFEI