用js做時間校正,取得本機時間,是存在bug的。
使用js也可獲取到伺服器時間,原理是使用 ajax請求,傳回的頭部資訊就含有伺服器端的時間信息,取得到就可以了。以下:
1、依賴jQuery
程式碼:
function getServerDate(){ return new Date($.ajax({async: false}).getResponseHeader("Date")); }
以上函數回傳的就是一個Date對象,注意在使用ajax時必須同步,要不然無法回傳時間日期。
無需填寫請求連結;
如果伺服器時間和本地時間有時差,需要做校正。
2、原生
程式碼:
function getServerDate(){ var xhr = null; if(window.XMLHttpRequest){ xhr = new window.XMLHttpRequest(); }else{ // ie xhr = new ActiveObject("Microsoft") } xhr.open("GET","/",false)//false不可变 xhr.send(null); var date = xhr.getResponseHeader("Date"); return new Date(date); }
同樣回傳的是一個Date對象,xhr.open()必須使用同步;
。
如需使用非同步請求,可監聽onreadystatechange狀態做不同的操作。
程式碼如下:
function getServerDate(){ var xhr = null; if(window.XMLHttpRequest){ xhr = new window.XMLHttpRequest(); }else{ // ie xhr = new ActiveObject("Microsoft") } xhr.open("GET","/",true); xhr.send(null); xhr.onreadystatechange=function(){ var time,date; if(xhr.readyState == 2){ time = xhr.getResponseHeader("Date"); date = new Date(time); console.log(date); } } }
使用非同步不是很方便返回時間。
這裡的readyState有四種狀態,方便做不同處理:
0: 請求未初始化
1: 伺服器連線已建立
2: 請求已接收
3: 請求處理中
2: 請求已接收
請求完成,且回應已就緒失敗狀態,status的值:200: "OK"404: 找不到頁