淺析Date對(duì)象及常用時(shí)間格式

2018-06-09 17:57 更新

Date(時(shí)間)對(duì)象是JavaScript在瀏覽器環(huán)境的一個(gè)內(nèi)置對(duì)象,用于處理客戶端時(shí)間邏輯。本篇文章將會(huì)簡(jiǎn)單的介紹Date對(duì)象,重點(diǎn)是介紹Web開(kāi)發(fā)中涉及到時(shí)間時(shí)常用的幾種時(shí)間字符串格式。

Date對(duì)象

關(guān)于Date對(duì)象詳細(xì)的文檔說(shuō)明,請(qǐng)參閱Mozilla開(kāi)發(fā)者中心。

這里稍微提兩點(diǎn),Data對(duì)象中,除了3個(gè)比較特殊方法(這里我們可以將其理解成靜態(tài)方法)之外,其他的方法都是實(shí)例方法。

  • Date.UTC(),接受一個(gè)合法的時(shí)間字符串或者多個(gè)日期參數(shù),返回此時(shí)間距1970-1-1 00:00:00的毫秒數(shù)。
  • Date.now(),返回方法調(diào)用時(shí)刻距1970-1-1 00:00:00的毫秒數(shù)。
  • Date.parse(),這個(gè)方法比較靈活,可以接受多種參數(shù),返回參數(shù)所代表的時(shí)間點(diǎn)距1970-1-1 00:00:00的毫秒數(shù)。

此外,Date對(duì)象的構(gòu)造方法接受參數(shù)的形式非常靈活,在實(shí)際使用要活學(xué)活用。

好了,其他的內(nèi)容就可以直接參考MDN文檔了。

各種時(shí)間格式

上述提到Date對(duì)象的構(gòu)造函數(shù)或者部分實(shí)例方法可以接受一個(gè)合法的時(shí)間格式字符串作為參數(shù)。這里我們先來(lái)對(duì)常見(jiàn)的幾種時(shí)間格式做一下科普。

GMT時(shí)間

先來(lái)段網(wǎng)上的關(guān)于GMT時(shí)間的段子,

十七世紀(jì),格林威治皇家天文臺(tái)為了海上霸權(quán)的擴(kuò)張計(jì)劃而進(jìn)行天體觀測(cè)。1675年舊皇家觀測(cè)所(Old Royal Observatory)正式成立,到了1884年決定以通過(guò)格林威治的子午線作為劃分地球東西兩半球的經(jīng)度零度。觀測(cè)所門口墻上有一個(gè)標(biāo)志24小時(shí)的時(shí)鐘,顯示當(dāng)下的時(shí)間,對(duì)全球而言,這里所設(shè)定的時(shí)間是世界時(shí)間參考點(diǎn),全球都以格林威治的時(shí)間作為標(biāo)準(zhǔn)來(lái)設(shè)定時(shí)間,這就是我們耳熟能詳?shù)摹父窳滞螛?biāo)準(zhǔn)時(shí)間」(Greenwich Mean Time,簡(jiǎn)稱G.M.T.)的由來(lái),標(biāo)示在手表上,則代表此表具有兩地時(shí)間功能,也就是同時(shí)可以顯示原居地和另一個(gè)國(guó)度的時(shí)間。

再來(lái)給出wiki上定義,其實(shí)GMT時(shí)間是全球24時(shí)區(qū)劃分的標(biāo)準(zhǔn)。北京時(shí)間就是處于東八區(qū)上,一般的北京時(shí)間會(huì)被表示成localtimestring + GMT+0800,如下,

Wed Mar 11 2015 18:54:49 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)

從wiki中,我們可以知道,GMT是根據(jù)地球自轉(zhuǎn)及格林威治子午線來(lái)調(diào)時(shí)的。但是由于種種原因,這種計(jì)時(shí)是存在誤差的。現(xiàn)在的標(biāo)準(zhǔn)時(shí)間,是由原子鐘報(bào)時(shí)的協(xié)調(diào)世界時(shí)(UTC)。

UTC時(shí)間

首先給出其定義

UTC時(shí)間,又稱為世界標(biāo)準(zhǔn)時(shí)間或者世界協(xié)調(diào)時(shí)間,簡(jiǎn)稱UTC(Coordinated Universal Time),是最主要的世界時(shí)間標(biāo)準(zhǔn),其以原子時(shí)秒長(zhǎng)為基礎(chǔ),在時(shí)刻上盡量接近于格林威治時(shí)間(其實(shí)UTC時(shí)間比GMT時(shí)間要精確)。

ISO時(shí)間

我們這里說(shuō)的ISO時(shí)間其實(shí)指的是國(guó)際標(biāo)準(zhǔn)化組織ISO制定的ISO 8601標(biāo)準(zhǔn),是日期和時(shí)間的表示方法,全稱為《數(shù)據(jù)存儲(chǔ)和交換形式·信息交換·日期和時(shí)間的表示方法》,目前是第三版ISO8601:2004以替代第一版ISO8601:1988與第二版ISO8601:2000。

關(guān)于ISO 8601更多的內(nèi)容請(qǐng)參見(jiàn)wiki。

其他的時(shí)間格式

除了上述提到的在web開(kāi)發(fā)中最常用的三種時(shí)間格式之外,還有日常生活中常見(jiàn)的夏時(shí)制(DST)、北京時(shí)間(CST)中部標(biāo)準(zhǔn)時(shí)間等等。不過(guò)因?yàn)檫@些時(shí)間格式在web開(kāi)發(fā)(或者說(shuō)展現(xiàn))中并不常用,這里我們就一筆帶過(guò),不再多作介紹。

各時(shí)間格式之間轉(zhuǎn)化

我們?cè)跒g覽器書寫如下代碼即可得帶一個(gè)時(shí)間對(duì)象,

var d = new Date();
console.log(d);

這里我們沒(méi)有給Date的構(gòu)造函數(shù)傳遞任何參數(shù),得到的將是封裝當(dāng)前時(shí)間的一個(gè)時(shí)間對(duì)象。

上述代碼在Chrome Console中執(zhí)行的結(jié)果如下,

Wed Mar 11 2015 19:14:51 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)

這其實(shí)是一種山寨的GMT時(shí)間格式字符串,中國(guó)標(biāo)準(zhǔn)時(shí)間其實(shí)就是北京時(shí)間。

我們繼續(xù)在console中執(zhí)行下面的代碼,

d.toGMTString();
d.toUTCString();
d.toISOString();

結(jié)果如下,

"Wed, 11 Mar 2015 11:14:51 GMT"
"Wed, 11 Mar 2015 11:14:51 GMT"
"2015-03-11T11:14:51.182Z"

從結(jié)果可以看出toGMTString()toUTCString()得到的結(jié)果是一致。前面我們也說(shuō)過(guò),UTC時(shí)間其實(shí)就是更加精確的GMT時(shí)間。

至于toISOString()得到的時(shí)間字符串是有一般性規(guī)律的,其格式一般如下,

yyyy-mm-ddThh:mm:ss.000Z

使用字母TZ鏈接日期和時(shí)間,且Z前面還會(huì)有三位數(shù),這三位數(shù)是時(shí)間對(duì)象對(duì)應(yīng)的毫秒數(shù)。

由上面我們可以看出,在進(jìn)行web開(kāi)發(fā)時(shí),如果涉及到日期時(shí)間的相關(guān)展示時(shí),我們應(yīng)該選擇哪一種時(shí)間格式作為數(shù)據(jù)傳輸?shù)母袷侥??答案無(wú)疑是ISO時(shí)間格式,因?yàn)樗哂幸欢ǖ囊?guī)律,且都是有數(shù)字組成的基本格式。

參考列表


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)