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 相关文章推荐
php图像生成函数之间的区别分析
Dec 06 Javascript
jquery遍历checkbox介绍
Feb 21 Javascript
JS 获取鼠标左右键的键值方法
Oct 11 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
Aug 26 Javascript
jQuery.deferred对象使用详解
Mar 18 Javascript
为什么JavaScript没有块级作用域
May 22 Javascript
jQuery简单注册和禁用全局事件的方法
Jul 25 Javascript
基于jQuery实现手风琴菜单、层级菜单、置顶菜单、无缝滚动效果
Jul 20 jQuery
vue.js开发实现全局调用的MessageBox组件实例代码
Nov 22 Javascript
详解在HTTPS 项目中使用百度地图 API
Apr 26 Javascript
node 标准输入流和输出流代码实例
Sep 19 Javascript
vue轮播组件实现$children和$parent 附带好用的gif录制工具
Sep 26 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实现的click captcha点击验证码类实例
2014/09/23 PHP
PHP CURL 内存泄露问题解决方法
2015/02/12 PHP
分享php分页的功能模块
2015/06/16 PHP
PHP计算近1年的所有月份
2017/03/13 PHP
PHP解析url并得到url参数方法总结
2018/10/11 PHP
js实现的网站首页随机公告随机公告
2007/03/14 Javascript
js动态设置div的值下例子
2013/10/29 Javascript
JS可以控制样式的名称写法一览
2014/01/16 Javascript
使用Chart.js图表库制作漂亮的响应式表单
2015/10/28 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
2016/01/03 Javascript
第九篇Bootstrap导航菜单创建步骤详解
2016/06/21 Javascript
Webpack实现按需打包Lodash的几种方法详解
2017/05/08 Javascript
详解在vue-cli中使用路由
2017/09/25 Javascript
深入理解React高阶组件
2017/09/28 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
如何理解Vue的v-model指令的使用方法
2018/07/19 Javascript
vue实现form表单与table表格的数据关联功能示例
2019/01/29 Javascript
vue实现的网易云音乐在线播放和下载功能案例
2019/02/18 Javascript
前端开发之便利店收银系统代码
2019/12/27 Javascript
微信小程序去除左上角返回键的实现方法
2020/03/06 Javascript
javascript的hashCode函数实现代码小结
2020/08/11 Javascript
[01:03:41]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第三场 2月2日
2021/03/11 DOTA
Python实现遍历windows所有窗口并输出窗口标题的方法
2015/03/13 Python
通过Python爬虫代理IP快速增加博客阅读量
2016/12/14 Python
Python爬虫实现抓取京东店铺信息及下载图片功能示例
2018/08/07 Python
python中update的基本使用方法详解
2019/07/17 Python
Html5新标签解释及用法
2012/02/17 HTML / CSS
html5画布旋转效果示例
2014/01/27 HTML / CSS
幼儿园标语大全
2014/06/19 职场文书
幼儿园社区活动总结
2014/07/07 职场文书
党员个人对照检查材料
2014/10/01 职场文书
学校党委干部个人对照检查材料思想汇报
2014/10/09 职场文书
2014年信息技术工作总结
2014/12/16 职场文书
药品开票员岗位职责
2015/04/15 职场文书
爱国主义主题班会
2015/08/14 职场文书
Java设计模式之享元模式示例详解
2022/03/03 Java/Android