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 相关文章推荐
CheckBox 如何实现全选?
Jun 23 Javascript
js类中获取外部函数名的方法
Aug 19 Javascript
javascript操作table(insertRow,deleteRow,insertCell,deleteCell方法详解)
Dec 16 Javascript
JS对象转换为Jquery对象实现代码
Dec 29 Javascript
jQuery实现提示密码强度的代码
Jul 15 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
Apr 30 Javascript
BootStrap入门教程(一)之可视化布局
Sep 19 Javascript
Vue2.0表单校验组件vee-validate的使用详解
May 02 Javascript
webstorm添加vue.js支持的方法教程
Jul 05 Javascript
JavaScript实现短信倒计时60s
Oct 09 Javascript
jquery 实现拖动文件上传加载进度条功能
Mar 18 jQuery
前端js中的事件循环eventloop机制详解
May 15 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模板之Phpbean的目录结构
2008/01/10 PHP
使用PHP备份MYSQL数据的多种方法
2014/01/15 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
2015/12/02 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
PHP 获取客户端 IP 地址的方法实例代码
2018/11/11 PHP
PHP获取访问设备信息的方法示例
2019/02/20 PHP
JavaScript 动态将数字金额转化为中文大写金额
2009/05/14 Javascript
Extjs学习笔记之九 数据模型(上)
2010/01/11 Javascript
js捕获鼠标滚轮事件代码
2013/12/16 Javascript
JS动态修改iframe高度和宽度的方法
2015/04/01 Javascript
bootstrap选项卡使用方法解析
2017/01/11 Javascript
微信小程序实现登录页云层漂浮的动画效果
2017/05/05 Javascript
JavaScript在控件上添加倒计时功能的实现代码
2017/07/04 Javascript
基于js 本地存储(详解)
2017/08/16 Javascript
详解Vue-cli中的静态资源管理(src/assets和static/的区别)
2018/06/19 Javascript
jquery实现动态添加附件功能
2018/10/23 jQuery
微信小程序使用wx.request请求服务器json数据并渲染到页面操作示例
2019/03/30 Javascript
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
2020/03/17 Javascript
JavaScript冒泡算法原理与实现方法深入理解
2020/06/04 Javascript
微信小程序实现拨打电话功能的示例代码
2020/06/28 Javascript
vue props 一次传多个值实例
2020/07/22 Javascript
全面解析Vue中的$nextTick
2020/12/24 Vue.js
[02:11]2014DOTA2 TI专访VG战队Fenrir:队伍气氛良好
2014/07/11 DOTA
python使用PyGame模块播放声音的方法
2015/05/20 Python
pycharm远程调试openstack代码
2017/11/21 Python
scikit-learn线性回归,多元回归,多项式回归的实现
2019/08/29 Python
Python使用requests模块爬取百度翻译
2020/08/25 Python
暇步士官网:Hush Puppies
2016/09/22 全球购物
阿里巴巴美国:Alibaba美国
2019/11/24 全球购物
C#的几个面试问题
2016/05/22 面试题
物流管理毕业生自荐信
2013/10/24 职场文书
汽车制造与装配专业自荐信范文
2014/01/02 职场文书
高二英语教学反思
2014/01/19 职场文书
纪念九一八事变演讲稿1000字
2014/09/14 职场文书
财务部岗位职责范本
2015/04/14 职场文书
子女赡养老人协议书
2016/03/23 职场文书