在一个大型的项目中,不可避免会出现操作时间的业务,比如时间的格式化,比如时间的加减,我们一般会直接使用
moment.js
库来做,毕竟稳定可靠,也方便,那当我们系统只是几个简单页面,对时间的操作并不是很大,引入库文件并不是很必须的情况,我们需要时区展示怎么办?是不是可以用浏览器支持的原生方法来实现?
MDN Intl.DateTimeFormat
获得客户端当前时区:
1
|
Intl.DateTimeFormat().resolvedOptions().timeZone
|
可以看到输出:Asia/Shanghai,即我所在时区为上海。
我们知道了在哪个时区,但是我们需要同时表示UTC+n的形式,那我们怎么知道当前时区的UTC偏移量呢?
我们可以通过
Date
对象实例的
getTimezoneOffset
方法获取(注意返回的结果的单位为分):
1
|
new Date().getTimezoneOffset()
|
可以看到输出的是
-480
,这样获得到的是0时区的时间差(0时区减去当前所在时区,单位是分钟)。
中国标准时间是以东八区为准,比0时区的时间要早8小时。所以是-480,除以60就是所在时区:然后
-480 / 60 = -8
,即现在这个时区的偏移量为
0 - (-8) = 8
,即表示为:
UTC+8
,代码为:
1
|
'UTC+' + (0 - new Date().getTimezoneOffset() / 60);
|
需要注意的是,不管你以何参数实例化一个
Date
对象,js在本地存储时,都会转化为本地时区,js不会帮你存储实例化该日期时的时区信息。
相比较来说,
moment.js
是一个很好的时间处理的库,如果有时间操作的业务还是直接使用
moment.js
库方便一点,当然,只是显示一下时区之类的,可以直接用上面简单处理即可。