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 Jcrop插件实现图片选取功能
Nov 23 Javascript
js判断输入是否为数字的具体实例
Aug 03 Javascript
在linux中使用包管理器安装node.js
Mar 13 Javascript
jQuery Ajax使用FormData对象上传文件的方法
Sep 07 Javascript
用jQuery的AJax实现异步访问、异步加载
Nov 02 Javascript
详解vue-Resource(与后端数据交互)
Jan 16 Javascript
vue.js实现条件渲染的实例代码
Jun 22 Javascript
快速理解 JavaScript 中的 LHS 和 RHS 查询的用法
Aug 24 Javascript
JavaScript数组的5种迭代方法
Sep 29 Javascript
jQuery 隐藏/显示效果函数用法实例分析
May 20 jQuery
vue+iview框架实现左侧动态菜单功能的示例代码
Jul 23 Javascript
微信小程序调用后台service教程详解
Nov 06 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
PHP会员找回密码功能的简单实现
2016/09/05 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
2017/03/31 PHP
php+layui数据表格实现数据分页渲染代码
2019/10/26 PHP
WEB页子窗口(showModalDialog和showModelessDialog)使用说明
2009/10/25 Javascript
javascript中强制执行toString()具体实现
2013/04/27 Javascript
关于JS中的闭包浅谈
2013/08/23 Javascript
jquery获取子节点和父节点的示例代码
2013/09/10 Javascript
JavaScript实现控制打开文件另存为对话框的方法
2015/04/17 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
2015/09/01 Javascript
简单掌握JavaScript中const声明常量与变量的用法
2016/05/21 Javascript
jquery计算出left和top,让一个div水平垂直居中的简单实例
2016/07/13 Javascript
正则中的回溯定义与用法分析【JS与java实现】
2016/12/27 Javascript
原生JS轮播图插件
2017/02/09 Javascript
js实现时间轴自动排列效果
2017/03/09 Javascript
nodejs中模块定义实例详解
2017/03/18 NodeJs
React-router中结合webpack实现按需加载实例
2017/05/25 Javascript
JavaScript转换数据库DateTime字段类型方法
2017/06/27 Javascript
vue学习笔记之v-if和v-show的区别
2017/09/20 Javascript
详解解决使用axios发送json后台接收不到的问题
2018/06/27 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
浅谈在Vue.js中如何实现时间转换指令
2019/01/06 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
2019/10/26 Javascript
JS实现网站楼层导航效果代码实例
2020/06/16 Javascript
[36:41]完美世界DOTA2联赛循环赛FTD vs Magma第一场 10月30日
2020/10/31 DOTA
python 控制语句
2011/11/03 Python
Python实现的简单dns查询功能示例
2017/05/24 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
2017/09/08 Python
Python字典的概念及常见应用实例详解
2019/10/30 Python
详解pandas.DataFrame.plot() 画图函数
2020/06/14 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
2021/02/25 Python
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
委托书的写法
2014/08/30 职场文书
党员十八大心得体会
2014/09/12 职场文书
2014年前台个人工作总结
2014/11/14 职场文书
小学教师节活动总结
2015/03/20 职场文书
祝福语集锦:给百岁老人祝寿贺词
2019/11/19 职场文书