安裝
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對象或其克隆。