moment.js

GMT & UTC

某一时刻在全球任何地方应该是唯一的,时区的不同是为了让地球不同时区的人中午十二点都是太阳正当午,形成交流上没有障碍。标准是格林威治标准时间(GMT,Greenwich Mean Time,世界时),GMT时间的准确度为每天数毫秒。

为进一步精确时间,协调世界时(UTC,Coordinated Universal Time)出现,其准确度为每日数纳秒。UTC用1970年1月1日午夜(零时)开始经过毫秒数来保存日期。

Date类

构造函数new Date()传参

Date构造函数无参情况下,实例化对象自动获得当前日期和时间。若想根据特定日期和时间创建日期对象,必须传入表示该日期的毫秒数(从UTC时间1970年1月1日午夜起止该日期止的毫秒数,时间戳)。所以new Date(0)即为UTC时间的1970年1月1日00:00:00:000。

new Date(0)

Date传入表示时间的字符串,则会自动调用ECMAScript的Date.parse()将字符串转化为对应距离GMT标准时间的毫秒数。然而,Date.parse()的行为因实现因地区而异,对跨域跨平台是隐患,不推荐时间。

new Date("May 24,2018")

new Date(Date.parse("May 24,2018"))

同模仿Date.parse()一样,Date构造函数也会模仿Date.UTC()Date.UTC()返回表示日期的毫秒数,与 Date.parse() 在构建值时使用不同的信息。 Date.UTC()的参数分别是年份、基于0的月份、月中天数(1至31)、小时(0至23)、分钟、秒、毫秒。其中,年和月是必须的,若没有提供月中天数默认为1,若参数均省略则默认均为0。

new Date(Date.UTC(2000,0));//GMT的2000年1月1日午夜零时
new Date(Date.UTC(2018,4,5,12,22,30));//GMT的2018年4月5日12点22分30秒

new Date(2018,1,1,12,21,40)new Date(Date.UTC(2018,1,1,12,21,40))创建的并非同一时刻的Date类,new Date()日期和时间是基于本地时区而非GMT,即创建的是本地时间2018年2月1日12点21分40秒。此外要根据代码执行环境所处时区,若位于中国(GMT+08),则对应的是GMT时间2018年2月1日04点21分40秒。

ISODate

# 标准UTC时间格式
> new Date()
< Thu Jan 11 2018 17:02:58 GMT+0800 (中国标准时间)

ISO 8601扩展格式为 YYYY-MM-DDTHH:mm:ss.sssZ,在兼容ECMAScript5的实现才支持此格式。

在MongoDB中时间保存格式为ISODate类型,由于MongoDB中的date类型以UTC存储,即GMT时间。

> new Date()
ISODate("2018-01-11T09:09:15.927Z") //2018年1月11日17点09分15秒

ISOdate可直接使用new Date()进行比较,直接使用+8后即可。

你可能感兴趣的:(moment.js)