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

图一

图二

本文地址:http://www.cnblogs.com/wangmeijian/p/4442830.html

转载请保留出处!

时间: 2024-10-13 04:37:29

Javascript获取服务器时间的相关文章

小案例 - 获取服务器时间

1. GetTime.html 1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title></title> 6 <scri

javascript获取当前时间

? //时间设置 <script type="text/javascript"> <!-- var myDate = new Date();     myDate.getYear();      //获取当前年份(2位)     myDate.getFullYear(); //获取完整的年份(4位,1970-????)     myDate.getMonth();      //获取当前月份(0-11,0代表1月)     myDate.getDate();     

Unity 获取服务器时间 HTTP请求方式

在写每日签到的时候,我居然使用的是本地时间...被项目经理笑哭了...., 如果你在写单机游戏,没有游戏服务器,但又不想使用本地时间,就可以采用下面方法. 方法总结: 1. 使用HTTP请求获取服务器时间,不能实时获取服务器时间这样高频率的 2. 使用socket可以实时获取服务器时间 3. 使用C#自带API获取sql server 标准北京时间(=.=还没有找到这个API) 第HTTP方式: 代码: using UnityEngine; using System.Collections; u

通过AFNetworking获取服务器时间

在一些场合,我们需要获取服务器的时间,计算该时间与客户端本地时间的差值,以利于时间同步.有人说,这个不是很简单吗,让后台的TX给你一个获取服务器时间的接口就行了. 其实这个还是比较麻烦的,更简单的是利用HTTP Header来获取服务器时间--每个HTTP header的Date参数就是这个时间.在iOS中我们通常用AFNetworking发请求,那么用AFNetworking怎么得到HTTP header信息呢? 很简单,用 [[operation response] allHeaderFie

Ubuntu利用TCP协议来获取服务器时间

Linux利用TCP协议来获取服务器时间 这里使用Unix网络编程里面的一个小程序,该客户端建立一个到服务器的TCP连接,然后读取由服务器以直观可读格式简单地送回的当前时间和日期. #include "unp.h" int main(int argc, char **argv) { int sockfd, n; char recvline[MAXLINE + 1]; struct sockaddr_in servaddr; if (argc != 2) err_quit("u

jsp页面获取服务器时间

Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int day= c.get(Calendar.DAY);   这三行加在<%   %>里面 调用时用<%= year  %><%= month%><%= day%> jsp页面获取服务器时间

动态获取服务器时间

最近在做的这个项目要获取到后台的数据,然后使用html5绘制曲线,以前都是在自己电脑上使用没有发现有什么不正常的地方,昨天连接同事的服务器发现有段数据怎么都对不上了,开始我还以为程序有问题呢,找了半天结构发现是我的电脑时间和同事的电脑时间对不上导致的.既然发现了问题下面就是找出解决办法了. 实际上最好的解决办法是固定客户端的时间,不然修改,但你会发现这个不可能的.所以只有找其他方式的.再有就是获取服务器时间然后同步到客户端了.实际上这个游戏三种方式可行. 1.既然是动态获取就每秒获取一次,这样能

09 获取服务器时间

获取服务器时间:var now = new Date($.ajax({async: false}).getResponseHeader("Date")); 2.new Date()用法:获取年:var currentYear = now.getFullYear();获取月:var currentMonth = now.getMonth();获取日:var currentDay = now.getDate();获取小时:var currentHours = now.getHours();

JavaScript—获取本地时间以12小时制显示

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>获取时间</title> <script type="text/javascript"> function shijian() { var today = new Date(); var hh = today.getHours