1. 程式人生 > >JavaScript 時間與日期處理實戰:你肯定被坑過

JavaScript 時間與日期處理實戰:你肯定被坑過

JavaScript DateTime

標準時間

GMT即「格林威治標準時間」(Greenwich Mean Time,簡稱G.M.T.),指位於英國倫敦郊區的皇家格林威治天文臺的標準時間,因為本初子午線被定義為通過那裡的經線。然而由於地球的不規則自轉,導致GMT時間有誤差,因此目前已不被當作標準時間使用。UTC是最主要的世界時間標準,是經過平均太陽時(以格林威治時間GMT為準)、地軸運動修正後的新時標以及以「秒」為單位的國際原子時所綜合精算而成的時間。UTC比GMT來得更加精準。其誤差值必須保持在0.9秒以內,若大於0.9秒則由位於巴黎的國際地球自轉事務中央局釋出閏秒,使UTC與地球自轉週期一致。不過日常使用中,GMT與UTC的功能與精確度是沒有差別的。協調世界時區會使用“Z”來表示。而在航空上,所有使用的時間劃一規定是協調世界時。而且Z在無線電中應讀作“Zulu”(可參見北約音標字母),協調世界時也會被稱為“Zulu time”。

TimeZone&UTC Offsets:時區與偏移

人們經常會把時區與UTC偏移量搞混,UTC偏移量代表了某個具體的時間值與UTC時間之間的差異,通常用HH:mm形式表述。而TimeZone則表示某個地理區域,某個TimeZone中往往會包含多個偏移量,而多個時區可能在一年的某些時間有相同的偏移量。譬如America/Chicago, America/Denver, 以及 America/Belize在一年中不同的時間都會包含 -06:00 這個偏移。

時間戳

Unix時間戳表示當前時間到1970年1月1日00:00:00 UTC對應的秒數。注意,JavaScript內的時間戳指的是當前時間到1970年1月1日00:00:00 UTC對應的毫秒數,和unix時間戳不是一個概念,後者表示秒數,差了1000倍。

時間數字字串格式

RFC2822

JavaScript
12YYYY/MM/DD HH:MM:SS±timezone(時區用4位數字表示)// eg 1992/02/12 12:23:22+0800

ISO 8601

國際標準化組織的國際標準ISO 8601是日期和時間的表示方法,全稱為《資料儲存和交換形式·資訊交換·日期和時間的表示方法》。目前最新為第三版ISO8601:2004,第一版為ISO8601:1988,第二版為ISO8601:2000。年由4位陣列成,以公曆公元1年為0001年,以公元前1年為0000年,公元前2年為-0001年,其他以此類推。應用其他紀年法要換算成公曆,但如果傳送和接受資訊的雙方有共同一致同意的其他紀年法,可以自行應用。

JavaScript
1 2 3 4 5 6 YYYY-MM-DDThh:mm:ss±timezone(時區用HH:MM表示) 1997-07-16T08:20:30Z // “Z”表示UTC標準時區,即"00:00",所以這裡表示零時區的`1997年7月16日08時20分30秒` //轉換成位於東八區的北京時間則為`1997年7月17日16時20分30秒` 1997-07-16T19:20:30+01:00 // 表示東一區的1997年7月16日19時20秒30分,轉換成UTC標準時間的話是1997-07-16T18:20:30Z

Reference

Date

JavaScript為我們提供了不是很好用的Date物件作為時間日期物件,Date()直接返回當前時間字串,不管引數是number還是任何string。而new Date()則是會根據引數來返回對應的值,無引數的時候,返回當前時間的字串形式;有引數的時候返回引數所對應時間的字串。new Date()對引數不管是格式還是內容都要求,且只返回字串,標準的構造Date物件的方法有:

JavaScript
12345678910111213141516// 不帶new操作符,像一個函式一樣呼叫。它將忽略所有傳入的引數,並返回當前日期和時間的一個字串表示。newDate();// 可接受一個數字引數,該引數表示設定時間與1970年1月1日0點之間的毫秒數。newDate(value);// 可接受一個字串引數,引數形式類似於Date.parse()方法。但parse()方法返回的是一個數字,而Date()函式返回的是一個物件。newDate(dateString);// 可接受引數形式類似於Date.UTC()方法的引數,但Date.UTC()方法返回是一個毫秒數,且是UTC時間,而Date()函式返回是一個物件,且是本地時間。newDate(year,month[,day[,hour[,minutes[,seconds[,milliseconds]]]]]);--------------------------------------------------