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 相关文章推荐
2007/12/23更新创意无限,简单实用(javascript log)
Dec 24 Javascript
JS实现在Repeater控件中创建可隐藏区域的代码
Sep 16 Javascript
用javascript作一个通用向导说明
Aug 30 Javascript
用Javascript实现Windows任务管理器的代码
Mar 27 Javascript
Table冻结表头示例代码
Aug 20 Javascript
JS将光标聚焦在文本最后的实现代码
Mar 28 Javascript
动态加载jQuery的方法
Jun 16 Javascript
js判断出两个字符串最大子串的函数实现方法
Nov 01 Javascript
基于MVC方式实现三级联动(JavaScript)
Jan 23 Javascript
vue-drag-chart 拖动/缩放图表组件的实例代码
Apr 10 Javascript
JS求解两数之和算法详解
Apr 28 Javascript
JavaScript TAB栏切换效果的示例
Nov 05 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获取mysql版本的几种方法小结
2008/03/25 PHP
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
2014/04/21 PHP
Zend Framework连接Mysql数据库实例分析
2016/03/19 PHP
PHP 将dataurl转成图片image方法总结
2016/10/14 PHP
jQuery使用手册之 事件处理
2007/03/24 Javascript
教你如何解密js/vbs/vbscript加密的编码异处理小结
2008/06/25 Javascript
prototype 学习笔记整理
2009/07/17 Javascript
动态调用CSS文件的JS代码
2010/07/29 Javascript
基于JQuery制作的产品广告效果
2010/12/08 Javascript
javascript跨域总结之window.name实现的跨域数据传输
2015/11/01 Javascript
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
2015/11/24 Javascript
封装好的javascript前端分页插件pagination
2016/01/04 Javascript
jQuery中inArray方法注意事项分析
2016/01/25 Javascript
JS解决移动web开发手机输入框弹出的问题
2017/03/31 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
vue 国际化 vue-i18n 双语言 语言包
2018/06/07 Javascript
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
2018/07/23 Javascript
antd vue table跨行合并单元格,并且自定义内容实例
2020/10/28 Javascript
Python求两个list的差集、交集与并集的方法
2014/11/01 Python
Python编写电话薄实现增删改查功能
2016/05/07 Python
Python 爬虫多线程详解及实例代码
2016/10/08 Python
python executemany的使用及注意事项
2017/03/13 Python
Python守护线程用法实例
2017/06/23 Python
总结python中pass的作用
2019/02/27 Python
Python中super函数用法实例分析
2019/03/18 Python
Django中间件拦截未登录url实例详解
2019/09/03 Python
详解python中docx库的安装过程
2019/11/08 Python
python实现局域网内实时通信代码
2019/12/22 Python
Python如何向SQLServer存储二进制图片
2020/06/08 Python
html5中canvas学习笔记2-判断浏览器是否支持canvas
2013/01/06 HTML / CSS
领导干部作风建设工作总结
2014/10/23 职场文书
司考复习计划
2015/01/19 职场文书
2015年招生工作总结
2015/05/04 职场文书
消防宣传标语大全
2015/08/03 职场文书
python四种出行路线规划的实现
2021/06/23 Python
利用Python实时获取steam特惠游戏数据
2022/06/25 Python