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对象或其克隆。

官方文档

上一篇:TonWeb6.1Linux安装文档


下一篇:Docker搭建Poste.io邮箱【保姆级教程】