JavaScript获取服务器时间的方法详解


Posted in Javascript onDecember 11, 2016

本文实例讲述了JavaScript获取服务器时间的方法。分享给大家供大家参考,具体如下:

Javascript是运行在客户端的脚本,我们一般都用new Date()来获取当前时间,但是得到的是客户端的时间,客户端时间是随意更改的,如果要做一个产品发布倒计时的话,客户端时间一改,就要闹笑话了。业务中需要用到服务器时间的场景还有很多,那么仅仅通过js怎么拿到服务器时间呢?事实上,只需要一个ajax请求就搞定,通过读取XMLHttpRequest对象的响应头里面的时间戳得到当前服务器时间!

原理就是这么简单:通过ajax向服务器发送请求,当服务器收到请求后即可读取响应头的时间戳了,不管请求成功或失败,都可以拿到时间戳。怎么判断服务器收到请求了呢?当ajax请求发送之后,XMLHttpRequest有5中状态变化:

XMLHttpRequest.readyState值 表示的意思
0 未初始化,已经创建一个XMLHttpRequest对象,但是还没有初始化
1 未发送,代码已经调用了xmlhttprequest open()方法并且xmlhttprequest已经准备好把一个请求发送到服务器
2 已发送,已经通过send()方法把一个请求发送到服务器端,但是还没有收到一个响应,可以读取响应头信息了
3 正在接收,已经接收到http响应头部信息,但是消息体部分还没有完全接收完毕
4 已加载,响应已经被完全接收

 

通过监听XMLHttpRequest的readystatechange事件来判断当前处于哪种状态,从表中可以看出,当XMLHttpRequest.readyState值为2时就可以读取响应头拿到我们要的时间戳了。代码如下:

<p id="time"></p>
<script>
ajax()
 function ajax(option){
 var xhr = null;
 if(window.XMLHttpRequest){
  xhr = new window.XMLHttpRequest();
 }else{ // ie
  xhr = new ActiveObject("Microsoft")
 }
 // 通过get的方式请求当前文件
 xhr.open("get","/");
 xhr.send(null);
 // 监听请求状态变化
 xhr.onreadystatechange = function(){
  var time = null,
   curDate = null;
  if(xhr.readyState===2){
  // 获取响应头里的时间戳
  time = xhr.getResponseHeader("Date");
  console.log(xhr.getAllResponseHeaders())
  curDate = new Date(time);
  document.getElementById("time").innerHTML = "服务器时间是:"+curDate.getFullYear()+"-"+(curDate.getMonth()+1)+"-"+curDate.getDate()+" "+curDate.getHours()+":"+curDate.getMinutes()+":"+curDate.getSeconds();
  }
 }
 }
</script>

到此,服务器时间就取到了。其实响应头里面的信息不仅仅有时间戳,可以使用xhr.getAllResponseHeaders()来获取整个响应头信息,响应头里面还包括服务器类型及版本号、请求的文件类型及编码等其他信息(见下图一),都可以通过这种方式读取。为了证明获取的确实是服务器时间,我用手机测试了一下(见下图二),当前北京时间是2015年4月20日21:59,PC机时间我调成了2015年2月1日 21:16

图一

 JavaScript获取服务器时间的方法详解

图二

 JavaScript获取服务器时间的方法详解

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

Javascript 相关文章推荐
jquery等宽输出文字插件使用介绍
Sep 18 Javascript
快速解决jQuery与其他库冲突的方法介绍
Jan 02 Javascript
浅谈JavaScript 的执行顺序
Aug 07 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
May 17 Javascript
改变checkbox默认选中状态及取值的实现代码
May 26 Javascript
轻松掌握JavaScript中介者模式
Aug 26 Javascript
jquery判断类型是不是number类型的实例代码
Oct 07 Javascript
js实现文字向上轮播功能
Jan 13 Javascript
vue2.0实现分页组件的实例代码
Jun 22 Javascript
jQuery判断网页是否已经滚动到浏览器底部的实现方法
Oct 27 jQuery
一个因@click.stop引发的bug的解决
Jan 08 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
Feb 18 Vue.js
基于jQuery实现的查看全文功能【实用】
Dec 11 #Javascript
AngularJS过滤器filter用法分析
Dec 11 #Javascript
jquery判断页面网址是否有效的两种方法
Dec 11 #Javascript
JavaScript奇技淫巧44招【实用】
Dec 11 #Javascript
利用JS判断鼠标移入元素的方向
Dec 11 #Javascript
实现JavaScript高性能的数据存储
Dec 11 #Javascript
探索Javascript中this的奥秘
Dec 11 #Javascript
You might like
Flash空降上海 化身大魔王接受挑战
2020/03/02 星际争霸
php入门学习知识点四 PHP正则表达式基本应用
2011/07/14 PHP
10个实用的PHP代码片段
2011/09/02 PHP
php图片加水印原理(超简单的实例代码)
2013/01/18 PHP
PHP获取数组长度或某个值出现次数的方法
2015/02/11 PHP
php数组冒泡排序算法实例
2016/05/06 PHP
利用php的ob缓存机制实现页面静态化方法
2017/07/09 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
2019/10/30 PHP
JS输入用户名自动显示邮箱后缀列表的方法
2015/01/27 Javascript
JavaScript File分段上传
2016/03/10 Javascript
AngularJS自定义插件实现网站用户引导功能示例
2016/11/07 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
jQuery插件HighCharts实现的2D堆条状图效果示例【附demo源码下载】
2017/03/14 Javascript
jquery dataTable 获取某行数据
2017/05/05 jQuery
vue中如何创建多个ueditor实例教程
2017/11/14 Javascript
Vuex实现数据共享的方法
2019/12/20 Javascript
vue.js+element 默认提示中英文操作
2020/11/11 Javascript
[01:14]3.19DOTA2发布会 三代刀塔人第二代
2014/03/25 DOTA
[59:08]Ti4 冒泡赛第二天 NEWBEE vs Titan 2
2014/07/15 DOTA
[04:28]DOTA2亚洲邀请赛小组赛第五日 TOP10精彩集锦
2015/02/03 DOTA
[01:42]DOTA2 – 虚无之灵
2019/08/25 DOTA
Python入门篇之文件
2014/10/20 Python
python中使用正则表达式的连接符示例代码
2017/10/10 Python
python放大图片和画方格实现算法
2018/03/30 Python
python同时替换多个字符串方法示例
2019/09/17 Python
python判断无向图环是否存在的示例
2019/11/22 Python
tensorflow 实现从checkpoint中获取graph信息
2020/02/10 Python
使用Python三角函数公式计算三角形的夹角案例
2020/04/15 Python
Python3爬虫发送请求的知识点实例
2020/07/30 Python
python中pathlib模块的基本用法与总结
2020/08/17 Python
TecoBuy澳大利亚:在线电子和小工具商店
2020/06/25 全球购物
通信专业个人自我鉴定
2013/10/21 职场文书
拖鞋店创业计划书
2014/01/15 职场文书
采购部长岗位职责
2014/06/13 职场文书
保护地球的标语
2014/06/17 职场文书
人事专员岗位说明书
2014/07/29 职场文书