最近做一个重构的业务,使用到了Mongo数据库,在接口中需要返回数据的的更新时间。之前数据库中都使用了时间戳记录时间,返给前端的数据直接使用时间戳进行格式化,并且查询条件也是由时间戳进行比对。
没想到,做数据写入接口的同事,将这个字段由时间戳改为了使用Mongo自带的标准的日期格式:ISODate("2016-01-01T00:00:00Z")
突然发现自己一时间对JS中的日期对象、对时间的各种表示方法并没有一个比较清晰的脉络。所以想用一点时间对这块知识做一个梳理、总结。
1 几种时间标准
首先要明确,时间标准和时刻的关系。
我理解,时刻对于整个地球来说是唯一的。就在我写下这行文字的这一时刻,无论是美国、老挝还是柬埔寨,大家都经历了同一时刻,对于时间轴的刻度,全球是唯一的。
但是在不同的时区的人,代表这一刻的时间是各不相同的,我所在的北京时间是晚上21:26,但是对于美国、老挝、柬埔寨可能时间各不相同。
时区是地球上的区域使用同一个时间定义。以前,人们通过观察太阳的位置(时角)决定时间,这就使得不同经度的地方的时间有所不同(地方时)。1863年,首次使用时区的概念。时区通过设立一个区域的标准时间部分地解决了这个问题。
不同给的时区有对应的时间标准,对于中国的开发者来说,常见的时间标准有GMT/UTC/CST
(1)GMT
GMT,格林尼治标准时间,是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义为通过那里的经线。但是格林尼治时间本身有一些缺陷,并不准确,已经被原子钟报时的协调世界时(UTC)替代。
(2)UTC
刚才提到了UTC,协调世界时,是目前最主要的是世界时间标准,以原子时为基础。它的精确度比GTM更高,但是对于大多数用途,UTC时间被认为能够与GMT时间互换。
(3)CST
CST,是北京时间,也叫做中国标准时间,比UTC时间快八个小时ÿ