[toc]
安裝
npm install moment-timezone --save
引用
import moment from 'moment-timezone'
使用
獲取用戶時區(qū)
moment.tz.guess()
默認(rèn)情況下欣硼,Moment Timezone會緩存檢測到的時區(qū)坟奥,也就是后續(xù)調(diào)用moment.tz.guess()
將始終返回相同的值(即使在兩次調(diào)用中已經(jīng)更改了時區(qū))母廷。
要忽略緩存并使用新值覆蓋緩存斑举,需要調(diào)用帶參數(shù)的方法:
moment.tz.guess(true)
使用(解析)時區(qū)
給已知時間加上時區(qū)
使用方法:moment.tz(..., String)
赐纱,最后一個參數(shù)String是時區(qū)標(biāo)識符:
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
創(chuàng)建的時刻具有不同的UTC時間脊奋,是因為這些時刻是在不同的時區(qū)創(chuàng)建的。
將已知時間轉(zhuǎn)換到指定時區(qū)
使用方法:moment(...).tz(String)
疙描,String是時區(qū)標(biāo)識符:
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')
即在默認(rèn)時區(qū)中創(chuàng)建對象诚隙,然后tz(String)
將其時區(qū)更改為指定的時區(qū)
創(chuàng)建的時刻具有相等的UTC時間,因為這些時刻是在默認(rèn)時區(qū)中創(chuàng)建的
注意:上面兩種方法得到不同結(jié)果的原因是因為傳入的時間字符串'2021-08-20 10:00:00'
本身是沒有時區(qū)標(biāo)識的起胰,所以在轉(zhuǎn)換的時候不同方法會加上不同的時區(qū)標(biāo)識導(dǎo)致的差異久又,但是如果傳入的時間本身就是能明確時間的時間戳、UTC時間('2021-10-31T07:01:00Z')的話效五,這兩種方法得到的結(jié)果就是一樣的了地消。
格式化
moment.tz(String).format("Z z"); // -08:00 CST
moment.tz(String).zoneAbbr(); // CST
moment.tz(String).zoneName(); // CST
代號 | 用途 | 示例 |
---|---|---|
大寫Z | 獲取偏移量 | +08:00 |
小寫z | 獲取縮寫時區(qū)名稱 | CST |
注意:小寫z格式化標(biāo)記并不總是顯示縮寫的時區(qū)名稱,而是顯示每個區(qū)域的時間偏移畏妖。
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)
設(shè)置默認(rèn)時區(qū)
moment.tz.setDefault(zone); //設(shè)置默認(rèn)時區(qū)為zone代表的時區(qū)脉执。
moment.tz.setDefault(); //重置默認(rèn)時區(qū)為本地時區(qū)。
注意:后續(xù)調(diào)用moment.tz.setDefault
不會影響現(xiàn)有moment對象或其克隆戒劫。