JavaScript獲取服務(wù)器時間的方法詳解
本文實例講述了JavaScript獲取服務(wù)器時間的方法。分享給大家供大家參考,具體如下:
Javascript是運行在客戶端的腳本,我們一般都用new Date()來獲取當(dāng)前時間,但是得到的是客戶端的時間,客戶端時間是隨意更改的,如果要做一個產(chǎn)品發(fā)布倒計時的話,客戶端時間一改,就要鬧笑話了。業(yè)務(wù)中需要用到服務(wù)器時間的場景還有很多,那么僅僅通過js怎么拿到服務(wù)器時間呢?事實上,只需要一個ajax請求就搞定,通過讀取XMLHttpRequest對象的響應(yīng)頭里面的時間戳得到當(dāng)前服務(wù)器時間!
原理就是這么簡單:通過ajax向服務(wù)器發(fā)送請求,當(dāng)服務(wù)器收到請求后即可讀取響應(yīng)頭的時間戳了,不管請求成功或失敗,都可以拿到時間戳。怎么判斷服務(wù)器收到請求了呢?當(dāng)ajax請求發(fā)送之后,XMLHttpRequest有5中狀態(tài)變化:
XMLHttpRequest.readyState值 | 表示的意思 |
0 | 未初始化,已經(jīng)創(chuàng)建一個XMLHttpRequest對象,但是還沒有初始化 |
1 | 未發(fā)送,代碼已經(jīng)調(diào)用了xmlhttprequest open()方法并且xmlhttprequest已經(jīng)準(zhǔn)備好把一個請求發(fā)送到服務(wù)器 |
2 | 已發(fā)送,已經(jīng)通過send()方法把一個請求發(fā)送到服務(wù)器端,但是還沒有收到一個響應(yīng),可以讀取響應(yīng)頭信息了 |
3 | 正在接收,已經(jīng)接收到http響應(yīng)頭部信息,但是消息體部分還沒有完全接收完畢 |
4 | 已加載,響應(yīng)已經(jīng)被完全接收 |
通過監(jiān)聽XMLHttpRequest的readystatechange事件來判斷當(dāng)前處于哪種狀態(tài),從表中可以看出,當(dāng)XMLHttpRequest.readyState值為2時就可以讀取響應(yīng)頭拿到我們要的時間戳了。代碼如下:
<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的方式請求當(dāng)前文件 xhr.open("get","/"); xhr.send(null); // 監(jiān)聽請求狀態(tài)變化 xhr.onreadystatechange = function(){ var time = null, curDate = null; if(xhr.readyState===2){ // 獲取響應(yīng)頭里的時間戳 time = xhr.getResponseHeader("Date"); console.log(xhr.getAllResponseHeaders()) curDate = new Date(time); document.getElementById("time").innerHTML = "服務(wù)器時間是:"+curDate.getFullYear()+"-"+(curDate.getMonth()+1)+"-"+curDate.getDate()+" "+curDate.getHours()+":"+curDate.getMinutes()+":"+curDate.getSeconds(); } } } </script>
到此,服務(wù)器時間就取到了。其實響應(yīng)頭里面的信息不僅僅有時間戳,可以使用xhr.getAllResponseHeaders()來獲取整個響應(yīng)頭信息,響應(yīng)頭里面還包括服務(wù)器類型及版本號、請求的文件類型及編碼等其他信息(見下圖一),都可以通過這種方式讀取。為了證明獲取的確實是服務(wù)器時間,我用手機測試了一下(見下圖二),當(dāng)前北京時間是2015年4月20日21:59,PC機時間我調(diào)成了2015年2月1日 21:16
圖一
圖二
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript時間與日期操作技巧總結(jié)》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript動畫特效與技巧匯總》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運算用法總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
相關(guān)文章
詳解關(guān)閉令人抓狂的ESlint 語法檢測配置方法
這篇文章主要介紹了詳解關(guān)閉令人抓狂的ESlint 語法檢測配置方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10js實現(xiàn)鼠標(biāo)左右移動,圖片也跟著移動效果
本文主要介紹了js實現(xiàn)鼠標(biāo)左右移動,圖片也跟著移動效果的方法與思路。具有很好的參考價值,下面跟著小編一起來看下吧2017-01-01結(jié)合ES6?編寫?JavaScript?設(shè)計模式中的結(jié)構(gòu)型模式
這篇文章主要介紹了結(jié)合ES6編寫JavaScript?設(shè)計模式中的結(jié)構(gòu)型模式,設(shè)計模式是軟件設(shè)計中常見問題的解決方案,這些模式很容易重復(fù)使用并且富有表現(xiàn)力2022-07-07JavaScript實現(xiàn)系統(tǒng)防掛機(無操作彈窗)的示例詳解
在一些學(xué)習(xí)系統(tǒng),或者考試系統(tǒng)中。一旦出現(xiàn)長時間未操作,就會判定這個人不在場。所以就會進(jìn)行退出系統(tǒng),處于對安全和系統(tǒng)負(fù)擔(dān)還有業(yè)務(wù)的需求。本文就來用JavaScript做一個系統(tǒng)防掛機功能,需要的可以參考一下2023-01-01Echarts中的clear()和dispose()用法實例
這篇文章主要給大家介紹了關(guān)于Echarts中clear()和dispose()用法的相關(guān)資料,clear和dispose是echarts提供的用于解決內(nèi)存溢出的方法 ,文中介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10layui 實現(xiàn)加載動畫以及非真實加載進(jìn)度的方法
今天小編就為大家分享一篇layui 實現(xiàn)加載動畫以及非真實加載進(jìn)度的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09