JS:如何获取时区

JavaScript0267

JS:如何获取时区,第1张

如果相比 Asia/Shanghai 你更想要 UTC+8 这种格式。那你可以通过获取时区偏移量的方式。

执行 getTimezoneOffset() 方法会返回 UTC 相对于当前时区 的相差分钟数。我们只需要再除以 -60 就得到了小时的偏移量。

我们通常所说的时间戳是指 UTC 时间自 1970 年 1 月 1 日 00 时 00 分 00 秒起经过的毫秒数。

UTC(Universal Time Coordinated),即协调世界时。又称世界统一时间、世界标准时间、国际协调时间。是基于标准的 GMT 提供的准确时间。

操作系统鼻祖 Unix 系统于 1971 年发布。为了在 Unix 上表示时间,需要通过当前时间和一个“纪元时间”进行对比,用其间相差的秒数作为时间戳。为了让 Unix 时间戳用的尽可能久,最初就把 1971-1-1 定义成“纪元时间”,后来为了方便记忆和使用,纪元时间从 1971-01-01 调整到了 1970-01-01。

GMT(Greenwich Mean Time),即格林尼治标准时间。格林尼治标准时间指位于伦敦郊区的皇家格林尼治天文台的标准时间,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时的时间。是 19 世纪中叶大英帝国的基准时间,同时也是事实上的世界基准时间。

但是由于地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能和实际的太阳时相差 16 分钟。地球每天的自转是有些不规则的,而且正在缓慢减速。所以,格林尼治时间已经不再被作为标准时间使用。自 1924 年 2 月 5 日开始,格林尼治天文台每隔一小时会向全世界发放调时信息。而 UTC 是原子钟(是一种计时装置,精度可以达到每 2000 万年误差 1 秒)提供的基于标准的 GMT 提供的准确时间。

参考资料:

一直被各种时间格式困扰,所以这次来总结一下常用的时间格式到底有哪些,它们之间如何互相转换。

ISO Date "2015-03-25" 国际标准

Short Date"03/25/2015"

Long Date "Mar 25 2015" 或者 "25 Mar 2015"

Full Date "Wednesday March 25 2015"

new Date()方法可以将前四种时间格式当做参数,输出 UTC 格式的时间

UTC "2015-03-25T12:00:00" 看到日期和时间中间有一个字母 T 表示为 UTC 时间 是 现在使用的标准时间

UTC 是时间标准;ISO-8601 是表示时间的一种标准格式

ISO-8601 的具体日期的时间表示法,在 UTC 时间后加 Z,如 "2015-03-25T12:00:00Z",Z 表示是通用标准,其它的时区的时间和 UTC 不同,所以用实际时间加时差表示。

GMT Greenwich Mean Time "Mon Feb 13 08:00:00 GMT+08:00 2012" 中间有 GMT+ 字样

UTC(Universal Time Coordinated 原子钟提供)和 GMT (Greenwich Mean Time 格林尼治时间)一样

EDT (US)Eastern Daylight Time 东部夏令时

CDT (US) Central Daylight Time 中部夏令时

MDT (US)Mountain Daylight Time 山地夏令时

PDT (US) Pacific Daylight Time 太平洋夏令时

EST (US) Eastern Standard Time 东部标准时间

CST"Web Mar 25 2015 08:00:00 GMT+0800" 中部标准时间

MST (US) Mountain Standard Time 山地标准时间

PST (US) Pacific Standard Time 太平洋标准时间

设置时间时,没有指定 time zone,js 将会使用浏览器的 time zone

获取时间时,没有指定 time zone,结果将会转换成浏览器的 time zone

总之,如果时间是用 GMT 时间创建,如果浏览器 from central US 时间将会被转换成 CDT。

涉及到格式类型:UTC,GMT,unix timestamp

前言:有时候后端返回给前端的时间格式是这种的

        该时间格式为UTC格式,"+00:00","+"代表是东边的时区,当"+"变成"-"时,代表是西边的时区,后面紧接着的两个数字代表的是具体那个时区,如"+08"代表东八区,":"后的两个数代表和伦敦协调时偏差多少分钟。

        将该时间格式改成"YYYY-mm-dd HH:MM:SS"等格式,则需要处理后端返回时区与本时区时间的偏差。js的Date对象提供getTimezoneOffset函数,用于获取本时区与伦敦协调时的时间差,返回数值的单位是分钟。

        Date对象的toLocaleDateString函数,在PC端和移动端有差别,在安卓移动端会比PC端的返回值多"上午"、"下午"等。

        没有直接使用new Date(value)来获取日期,是因为在IOS系统下,年月日的分隔符只有是"/"的字符串(如"2019/09/09")用new Date(string)得到正确的日期。

        还有另一种格式GMT,相较于UTC格式,GMT没有那么精确,不能具体到毫秒。

        以下内容为追加GMT格式转换

参考:

    JS操作时间 - UNIX时间戳简单介绍  -  阿胜4K

    世界协调时间(UTC)

    MDN Date