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 相关文章推荐
TinyMCE 新增本地图片上传功能
Nov 05 Javascript
js中将具有数字属性名的对象转换为数组
Mar 06 Javascript
利用javascript的面向对象的特性实现限制试用期
Aug 04 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
Apr 12 Javascript
js实现Select列表内容自动滚动效果代码
Aug 20 Javascript
JS面向对象编程详解
Mar 06 Javascript
基于jQuery实现Accordion手风琴自定义插件
Oct 13 Javascript
jquery精度计算代码 jquery指定精确小数位
Feb 06 Javascript
javascript数据类型详解
Feb 07 Javascript
小程序实现按下录音松开识别语音
Nov 22 Javascript
原生js实现瀑布流效果
Mar 09 Javascript
一篇超完整的Vue新手入门指导教程
Nov 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
如何写php守护进程(Daemon)
2015/12/30 PHP
Smarty模板常见的简单应用分析
2016/11/15 PHP
PHP实现随机生成水印图片功能
2017/03/22 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
在Laravel的Model层做数据缓存的实现
2019/09/26 PHP
jquery 插件学习(三)
2012/08/06 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
教你用AngularJS框架一行JS代码实现控件验证效果
2014/06/23 Javascript
AngularJS 使用$sce控制代码安全检查
2016/01/05 Javascript
javascript结合Flexbox简单实现滑动拼图游戏
2016/02/18 Javascript
js导出excel文件的简洁方法(推荐)
2016/11/02 Javascript
jQuery实现6位数字密码输入框
2016/12/29 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
Angular.JS通过指令操作DOM的方法
2017/05/10 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
Javascript中将变量转换为字符串的三种方法
2017/09/19 Javascript
Angularjs Promise实例详解
2018/03/15 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
2018/03/16 Javascript
使用wxapp-img-loader自定义组件实现微信小程序图片预加载功能
2018/10/18 Javascript
vue 中固定导航栏的实例代码
2019/11/01 Javascript
Vue实例的对象参数options的几个常用选项详解
2019/11/08 Javascript
JavaScript, select标签元素左右移动功能实现
2020/05/14 Javascript
python学习 流程控制语句详解
2016/06/01 Python
MAC中PyCharm设置python3解释器
2017/12/15 Python
Python实现将数据写入netCDF4中的方法示例
2018/08/30 Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
2019/07/23 Python
python隐藏类中属性的3种实现方法
2019/12/19 Python
pycharm激活码有效到2020年11月底
2020/09/18 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
2020/06/15 Python
python如何建立全零数组
2020/07/19 Python
Python利用Faiss库实现ANN近邻搜索的方法详解
2020/08/03 Python
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步骤详解
2020/11/02 Python
详解基于 Canvas 手撸一个六边形能力图
2019/09/02 HTML / CSS
Lacoste(法国鳄鱼)加拿大官网:以标志性的POLO衫而闻名
2019/05/15 全球购物
项目合作意向书模板
2014/07/29 职场文书
淮海战役观后感
2015/06/11 职场文书