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 相关文章推荐
JSON 客户端和服务器端的格式转换
Aug 27 Javascript
JavaScript之AOP编程实例
Jul 17 Javascript
jQuery div拖拽用法实例
Jan 14 Javascript
javascript实现瀑布流加载图片原理
Feb 02 Javascript
BootStrap中的表单大全
Sep 07 Javascript
ionic实现下拉刷新载入数据功能
May 11 Javascript
了解VUE的render函数的使用
Jun 08 Javascript
seajs中模块依赖的加载处理实例分析
Oct 10 Javascript
node.js环境搭建图文详解
Sep 19 Javascript
laravel实现中文和英语互相切换的例子
Sep 30 Javascript
vue 实现LED数字时钟效果(开箱即用)
Dec 08 Javascript
微信小程序开发打开另一个小程序的实现方法
May 17 Javascript
基于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
在WordPress中使用wp_count_posts函数来统计文章数量
2016/01/05 PHP
php PDO判断连接是否可用的实现方法
2017/04/03 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
2010/03/21 Javascript
基于jquery的表格排序
2010/09/11 Javascript
使用js获取地址栏中传递的值
2013/07/02 Javascript
js中对象的声明方式以及数组的一些用法示例
2013/12/11 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
2014/05/05 Javascript
使用jquery制作弹出框效果
2015/04/03 Javascript
javascript弹出带文字信息的提示框效果
2016/07/19 Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
2016/10/10 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
BootStrap学习系列之布局组件(下拉,按钮组[toolbar],上拉)
2017/01/03 Javascript
Bootstrap与Angularjs的模态框实例代码
2017/08/03 Javascript
bootstrap switch开关组件使用方法详解
2017/08/22 Javascript
浅谈Node异步编程的机制
2017/10/18 Javascript
JavaScript中call和apply方法的区别实例分析
2018/08/03 Javascript
vue-自定义组件传值的实例讲解
2018/09/18 Javascript
checkbox在vue中的用法小结
2018/11/13 Javascript
JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例
2019/02/21 Javascript
Vue中Table组件Select的勾选和取消勾选事件详解
2019/03/19 Javascript
JS关闭子窗口并且刷新上一个窗口的实现示例
2020/03/10 Javascript
python使用百度翻译进行中翻英示例
2014/04/14 Python
python查询mysql中文乱码问题
2014/11/09 Python
详解Python中__str__和__repr__方法的区别
2015/04/17 Python
Python获取任意xml节点值的方法
2015/05/05 Python
python实现闹钟定时播放音乐功能
2018/01/25 Python
Python用input输入列表的实例代码
2020/02/07 Python
Hotels.com越南:酒店预订
2019/10/29 全球购物
瑞士男士时尚网上商店:Babista
2020/05/14 全球购物
历史专业个人求职信范文
2013/12/07 职场文书
2014年教师培训的自我评价
2014/01/03 职场文书
个人实习生的自我评价
2014/02/16 职场文书
爱岗敬业事迹材料
2014/12/24 职场文书
销售督导岗位职责
2015/04/10 职场文书
廉洁自律心得体会2016
2016/01/13 职场文书