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