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注册事件的常用方法
Apr 03 Javascript
a标签的href与onclick事件的区别详解
Nov 12 Javascript
javascript中for/in循环及使用技巧
Sep 01 Javascript
精通JavaScript的this关键字
May 28 Javascript
Bootstrap零基础入门教程(二)
Jul 18 Javascript
JQuery实现定时刷新功能代码
May 09 jQuery
JavaScript实现QQ聊天消息展示和评论提交功能
May 22 Javascript
详解基于webpack2.x的vue2.x的多页面站点
Aug 21 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
Apr 01 Javascript
js实现淘宝首页的banner栏效果
Nov 26 Javascript
jQuery表单校验插件validator使用方法详解
Feb 18 jQuery
WebRTC记录音视频流(web技术分享)
Feb 24 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的日期与时间函数技巧
2008/04/24 PHP
PHP中str_replace函数使用小结
2008/10/11 PHP
php用户名的密码加密更安全的方法
2019/06/21 PHP
禁止直接访问php文件代码分享
2020/05/05 PHP
关于window.pageYOffset和document.documentElement.scrollTop
2011/04/05 Javascript
中国地区三级联动下拉菜单效果分析
2012/11/15 Javascript
购物车选中得到价格实现示例
2014/01/26 Javascript
js打开windows上的可执行文件示例
2014/05/27 Javascript
javascript复制粘贴与clipboardData的使用
2014/10/16 Javascript
jquery表单验证插件(jquery.validate.js)的3种使用方式
2015/03/28 Javascript
详解JavaScript ES6中的模板字符串
2015/07/28 Javascript
理解Javascript的call、apply
2015/12/16 Javascript
jQuery中deferred对象使用方法详解
2016/07/14 Javascript
VueJs使用Amaze ui调整列表和内容页面
2017/11/30 Javascript
详解如何在Vue里建立长按指令
2018/08/20 Javascript
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
axios如何利用promise无痛刷新token的实现方法
2019/08/27 Javascript
ES6 class类链式继承,实例化及react super(props)原理详解
2020/02/15 Javascript
微信小程序实现搜索功能
2020/03/10 Javascript
在vue项目中 实现定义全局变量 全局函数操作
2020/10/26 Javascript
python实现的简单猜数字游戏
2015/04/04 Python
python实现图书管理系统
2018/03/12 Python
python图形工具turtle绘制国际象棋棋盘
2019/05/23 Python
keras 获取某层输出 获取复用层的多次输出实例
2020/05/23 Python
Python实现AES加密,解密的两种方法
2020/10/03 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
一款纯css3实现的竖形二级导航的实例教程
2014/12/11 HTML / CSS
Html5 滚动穿透的方法
2019/05/13 HTML / CSS
美国户外运动商店:Sun & Ski
2018/08/23 全球购物
北京泡泡网网络有限公司.net面试题
2012/07/17 面试题
网球场地租赁协议范本
2014/10/07 职场文书
2015年新教师个人工作总结
2015/10/14 职场文书
python基于OpenCV模板匹配识别图片中的数字
2021/03/31 Python
实体类或对象序列化时,忽略为空属性的操作
2021/06/30 Java/Android
Python Pytorch查询图像的特征从集合或数据库中查找图像
2022/04/09 Python
nginx rewrite功能使用场景分析
2022/05/30 Servers