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 相关文章推荐
js阻止默认事件与js阻止事件冒泡示例分享 js阻止冒泡事件
Jan 27 Javascript
js获取和设置属性的方法
Feb 20 Javascript
Node调试工具JSHint的安装及配置教程
May 27 Javascript
JavaScript实现SHA-1加密算法的方法
Mar 11 Javascript
深入浅析Extjs中store分组功能的使用方法
Apr 20 Javascript
js注入 黑客之路必备!
Sep 14 Javascript
详解JS去重及字符串奇数位小写转大写
Dec 29 Javascript
elemetUi 组件--el-upload实现上传Excel文件的实例
Oct 27 Javascript
js实现省级联动(数据结构优化)
Jul 17 Javascript
完美解决vue 中多个echarts图表自适应的问题
Jul 19 Javascript
如何实现echarts markline标签名显示自己想要的
Jul 20 Javascript
vue设置全局访问接口API地址操作
Aug 14 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
资料注册后发信小技巧
2006/10/09 PHP
一个基于PDO的数据库操作类
2011/03/24 PHP
PHP对文件夹递归执行chmod命令的方法
2015/06/19 PHP
Symfony2学习笔记之控制器用法详解
2016/03/17 PHP
PHP实现非阻塞模式的方法分析
2018/07/26 PHP
用js怎么把&amp;字符换成&quot;&amp;amp:&quot;
2006/10/19 Javascript
浅谈JavaScript的Polymer框架中的事件绑定
2015/07/29 Javascript
JS控制层作圆周运动的方法
2016/06/20 Javascript
js时间比较 js计算时间差的简单实现方法
2016/08/26 Javascript
获取jqGrid中选择的行的数据
2016/11/30 Javascript
详解基于vue-cli3.0如何构建功能完善的前端架子
2018/10/09 Javascript
vue实现微信获取用户信息的方法
2019/03/21 Javascript
vue.js实现二级菜单效果
2019/10/19 Javascript
jquery实现点击左右按钮切换图片
2021/01/27 jQuery
[02:58]献给西雅图的情书_高清
2014/05/29 DOTA
[01:22:29]真视界:2019年国际邀请赛总决赛
2020/01/29 DOTA
python pandas 对series和dataframe的重置索引reindex方法
2018/06/07 Python
Python实现繁体中文与简体中文相互转换的方法示例
2018/12/18 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
2019/02/13 Python
PIL图像处理模块paste方法简单使用详解
2019/07/17 Python
Python 合并多个TXT文件并统计词频的实现
2019/08/23 Python
Django单元测试中Fixtures用法详解
2020/02/25 Python
用HTML5.0制作网页的教程
2010/05/30 HTML / CSS
用canvas画心电图的示例代码
2018/09/10 HTML / CSS
意大利婴儿产品网上商店:Mukako
2018/10/14 全球购物
北大青鸟学生求职信
2013/09/24 职场文书
本科生个人求职自荐信
2013/09/26 职场文书
本科毕业生的求职信范文
2013/11/20 职场文书
简单的大学生自我鉴定
2014/02/18 职场文书
《植物妈妈有办法》教学反思
2014/02/25 职场文书
成都人事代理协议书
2014/10/25 职场文书
投标承诺函范文
2015/01/21 职场文书
小学语文国培研修日志
2015/11/13 职场文书
如何制作自己的原生JavaScript路由
2021/05/05 Javascript
SpringCloud Feign请求头删除修改的操作代码
2022/03/20 Java/Android
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL