JavaScript獲取服務(wù)器時(shí)間的方法詳解
本文實(shí)例講述了JavaScript獲取服務(wù)器時(shí)間的方法。分享給大家供大家參考,具體如下:
Javascript是運(yùn)行在客戶端的腳本,我們一般都用new Date()來獲取當(dāng)前時(shí)間,但是得到的是客戶端的時(shí)間,客戶端時(shí)間是隨意更改的,如果要做一個(gè)產(chǎn)品發(fā)布倒計(jì)時(shí)的話,客戶端時(shí)間一改,就要鬧笑話了。業(yè)務(wù)中需要用到服務(wù)器時(shí)間的場(chǎng)景還有很多,那么僅僅通過js怎么拿到服務(wù)器時(shí)間呢?事實(shí)上,只需要一個(gè)ajax請(qǐng)求就搞定,通過讀取XMLHttpRequest對(duì)象的響應(yīng)頭里面的時(shí)間戳得到當(dāng)前服務(wù)器時(shí)間!
原理就是這么簡單:通過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ì)象,但是還沒有初始化 |
| 1 | 未發(fā)送,代碼已經(jīng)調(diào)用了xmlhttprequest open()方法并且xmlhttprequest已經(jīng)準(zhǔn)備好把一個(gè)請(qǐng)求發(fā)送到服務(wù)器 |
| 2 | 已發(fā)送,已經(jīng)通過send()方法把一個(gè)請(qǐng)求發(fā)送到服務(wù)器端,但是還沒有收到一個(gè)響應(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時(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")
}
// 通過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()來獲取整個(gè)響應(yīng)頭信息,響應(yīng)頭里面還包括服務(wù)器類型及版本號(hào)、請(qǐng)求的文件類型及編碼等其他信息(見下圖一),都可以通過這種方式讀取。為了證明獲取的確實(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簡單獲取當(dāng)前日期時(shí)間的方法(如:2017-03-29 11:41:10 星期四)
- JavaScript獲取當(dāng)前時(shí)間向前推三個(gè)月的方法示例
- js獲取當(dāng)前時(shí)間(昨天、今天、明天)
- JS日期對(duì)象簡單操作(獲取當(dāng)前年份、星期、時(shí)間)
- 在JSP頁面中獲取當(dāng)前日期時(shí)間的方法
- JavaScript中獲取時(shí)間的函數(shù)集
- nodejs如何獲取時(shí)間戳與時(shí)間差
- JS獲取今天是本月第幾周、本月共幾周、本月有多少天、是今年的第幾周、是今年的第幾天的示例代碼
相關(guān)文章
JS中Json數(shù)據(jù)的處理和解析JSON數(shù)據(jù)的方法詳解
JSON (JavaScript Object Notation)一種簡單的數(shù)據(jù)格式,比xml更輕巧,這篇文章主要介紹了JS中Json數(shù)據(jù)的處理和解析JSON數(shù)據(jù)的方法詳解的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06
一個(gè)檢測(cè)表單數(shù)據(jù)的JavaScript實(shí)例
這篇文章主要介紹了一個(gè)檢測(cè)表單數(shù)據(jù)的JavaScript實(shí)例,很簡單,很實(shí)用,比較適合初學(xué)者2014-10-10
JavaScript實(shí)現(xiàn)節(jié)點(diǎn)的刪除與序號(hào)重建實(shí)例
這篇文章主要介紹了JavaScript實(shí)現(xiàn)節(jié)點(diǎn)的刪除與序號(hào)重建方法,涉及javascript針對(duì)頁面節(jié)點(diǎn)的刪除與遍歷技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-08-08
點(diǎn)擊button獲取text內(nèi)容并改變樣式的js實(shí)現(xiàn)
這篇文章主要介紹了點(diǎn)擊button獲取text內(nèi)容并改變樣式的js實(shí)現(xiàn),經(jīng)測(cè)試非常實(shí)用,需要的朋友可以參考下2014-09-09
JavaScript 阻止超鏈接跳轉(zhuǎn)的操作方法(多種寫法)
很多朋友問小編能否通過JavaScript來阻止超鏈接的跳轉(zhuǎn)呢,今天給大家通過多種寫法來實(shí)現(xiàn)這一功能,具體實(shí)例代碼跟隨小編一起看看吧2021-06-06
js實(shí)現(xiàn)對(duì)table的增加行和刪除行的操作方法
下面小編就為大家?guī)硪黄猨s實(shí)現(xiàn)對(duì)table的增加行和刪除行的操作方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-10-10
詳解BootStrap中Affix控件的使用及保持布局的美觀的方法
Affix是BootStrap中的一個(gè)很有用的控件,他能夠監(jiān)視瀏覽器的滾動(dòng)條的位置并讓你的導(dǎo)航始終都在頁面的可視區(qū)域。本文重點(diǎn)給大家介紹BootStrap中Affix控件的使用及保持布局的美觀的方法,感興趣的朋友一起看看吧2016-07-07
js實(shí)現(xiàn)的仿Photoshop鼠標(biāo)滾輪控制輸入框取值(修正兼容Chrome)
一直很想做這個(gè)效果,原理是監(jiān)聽鼠標(biāo)滾輪事件;可將此效果繼續(xù)發(fā)散到其他應(yīng)用上,如圖片縮放,頁面縮放等。2010-02-02

