VUE中使用Moment Time-zone解決UTC時間跟本地時間的說明


安裝

npm install moment-timezone --save

引用

import moment from 'moment-timezone'

使用

獲取用戶時區

moment.tz.guess()

默認情況下,Moment Timezone會緩存檢測到的時區,也就是后續調用moment.tz.guess()將始終返回相同的值(即使在兩次調用中已經更改了時區)。
要忽略緩存並使用新值覆蓋緩存,需要調用帶參數的方法:

moment.tz.guess(true)

使用(解析)時區

給已知時間加上時區

使用方法:moment.tz(..., String),最后一個參數String是時區標識符:

let a = moment.tz('2021-08-20 10:00:00', 'Asia/Monterrey')
let b = moment.tz('2021-08-20 10:00:00', 'America/New_York')

a.format('YYYY/MM/DD HH:mm:ss Z z')	//2021/08/20 10:00:00 -05:00 CDT
b.format('YYYY/MM/DD HH:mm:ss Z z')	//2021/08/20 10:00:00 -04:00 EDT

a.utc().format()	//2021-08-20T15:00:00Z
b.utc().format()	//2021-08-20T14:00:00Z

創建的時刻具有不同的UTC時間,是因為這些時刻是在不同的時區創建的。

將已知時間轉換到指定時區

使用方法:moment(...).tz(String),String是時區標識符:

let a = moment('2021-08-20 10:00:00').tz('America/Monterrey')
let b = moment('2021-08-20 10:00:00').tz('America/New_York')

a.format('YYYY/MM/DD HH:mm:ss Z z')	//2021/08/19 21:00:00 -05:00 CDT
b.format('YYYY/MM/DD HH:mm:ss Z z')	//2021/08/19 22:00:00 -04:00 EDT

a.utc().format()	//2021-08-20T02:00:00Z
b.utc().format()	//2021-08-20T02:00:00Z

首先moment('2021-08-20 10:00:00')即在默認時區中創建對象,然后tz(String)將其時區更改為指定的時區
創建的時刻具有相等的UTC時間,因為這些時刻是在默認時區中創建的


注意:上面兩種方法得到不同結果的原因是因為傳入的時間字符串'2021-08-20 10:00:00'本身是沒有時區標識的,所以在轉換的時候不同方法會加上不同的時區標識導致的差異,但是如果傳入的時間本身就是能明確時間的時間戳UTC時間('2021-10-31T07:01:00Z')的話,這兩種方法得到的結果就是一樣的了。


格式化

moment.tz(String).format("Z z"); // -08:00 CST
moment.tz(String).zoneAbbr();    // CST
moment.tz(String).zoneName();    // CST
代號 用途 示例
大寫Z 獲取偏移量 +08:00
小寫z 獲取縮寫時區名稱 CST

注意:小寫z格式化標記並不總是顯示縮寫的時區名稱,而是顯示每個區域的時間偏移。

moment.tz('America/Los_Angeles').format('z')  // "PDT"     (abbreviation)
moment.tz('Asia/Magadan').format('z')         // "+11"     (3-char offset)
moment.tz('Asia/Colombo').format('z')         // "+0530"   (5-char offset)

設置默認時區

moment.tz.setDefault(zone); //設置默認時區為zone代表的時區。
moment.tz.setDefault(); //重置默認時區為本地時區。

注意:后續調用moment.tz.setDefault不會影響現有moment對象或其克隆。

官方文檔


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM