js中的时间系统

1.引言
在进入主题之前,我们先来了解一下什么是世界时(UT)和协调世界时(UTC)
世界时,即格林尼治平太阳时间,指格林尼治所在地区的标准时间,之所以选这个地方作为世界时,是因为在十七世纪,格林威治天文台为了海上霸权的扩张计划而进行天体观测。1675年旧观测所(Old Royal Observatory)正式成立,到了1884年决定以通过格林威治的子午线作为划分地球东西两半球的经度零度。对全球而言,这里所设定的时间是世界时间参考点,全球都以格林威治的时间作为标准来设定时间,这便是格林尼治标准时间(GMT)。
事实上,世界时并非是明确的(当需要好于几秒的准确性时),由于它是通过恒星观测,由恒星时推算的,所以在地球自转均匀时,它确实是一个均匀的时间系统;然而,科学家现已证实,地球自转实际上是不均匀的,缓缓减速的,所以世界时是一种非均匀时。但即使是在1960年后被历书时取代后,世界时仍然是各种领域的重要数据之一。
协调世界时,即世界标准时间,是经过平均太阳时(以格林威治时间GMT为准)、地轴运动修正后的新时标以及以「秒」为单位的国际原子时所综合精算而成的时间,计算过程相当严谨精密,因此若以「世界标准时间」的角度来说,UTC比GMT来得更加精准。
这套时间系统被应用于许多互联网和万维网的标准中,中国大陆、中国香港、中国澳门、中国台湾、蒙古国、新加坡、马来西亚、菲律宾、西澳大利亚州的时间与UTC的时差均为+8,也就是UTC+8。
2.Date对象
创建
Date()构造函数有四种基本形式,如下列代码所示
格式化
可以看到,我们使用Date对象创建出来的时间都是GMT格式的,这种格式基本是没法直接使用的,我们可以使用Date对象的方法来格式化时间
常用的自定义日期格式函数
3.关于js中GMT时间和UTC时间的疑问
上面的代码输出我们也看到了,js的时间是基于1970年1月1日的UTC时间,为什么通过控制台打印的却是GMT时间呢?
其实,js时间的确是基于UTC(更标准)/GMT时间的,但是打印出来的时间会因为各浏览器引擎的实现不同而不同,因为控制台打印的其实是toString执行的结果