基本引用类型-date

引用类型可以理解为对象定义,通过构造函数(new 操作符)来创建。

1
2
let now = new Date();

基本引用类型相对于集合引用类型可以理解为单独引用类型,因为集合引用类型这些

Object、Array、定型数组、Map、WeakMap、Set、WeakSet等这些可以将基本引用类型包含于其中。

Date

Date 类型将日期保存为自协调世界时(UTC,Universal Time Coordinated)时间 1970 年 1 月 1 日午夜(零时)至今所经过的毫秒数。使用这种存储格式, Date 类型可以精确表示 1970 年 1 月 1 日之前及之后 285 616 年的日期。

(为什么计算机很多语言里的时间都是从1970年1月1日午夜开始计算? - 希声lx - 博客园 (cnblogs.com))

GMT日期与UTC日期

GMT(Greenwich Mean Time), 格林威治平时(也称格林威治时间)。

它规定太阳每天经过位于英国伦敦郊区的皇家格林威治天文台的时间为中午12点。


UTC(Coodinated Universal Time),协调世界时,又称世界统一时间、世界标准时间、国际协调时间。由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC。

UTC 是现在全球通用的时间标准,全球各地都同意将各自的时间进行同步协调。UTC 时间是经过平均太阳时(以格林威治时间GMT为准)、地轴运动修正后的新时标以及以秒为单位的国际原子时所综合精算而成。


不给Date构造函数传参

在不给 Date 构造函数传参数的情况下,创建的对象将保存当前日期和时间。

给Date构造函数传参

要基于其他日期和时
间创建日期对象,必须传入其毫秒表示(UNIX 纪元 1970 年 1 月 1 日午夜之后的毫秒数)。ECMAScript为此提供了两个辅助方法: Date.parse() 和 Date.UTC() 。

Date.parse()应该支持的日期格式

 “月/日/年”,如 “5/23/2019” ;
 “月名 日, 年”,如 “May 23, 2019” ;
 “周几 月名 日 年 时:分:秒 时区”,如 “Tue May 23 2019 00:00:00 GMT-0700” ;
 ISO 8601 扩展格式“YYYY-MM-DDTHH:mm:ss.sssZ”,如 2019-05-23T00:00:00 (只适用于兼容 ES5 的实现)。
图片代码演示
如果传给 Date.parse() 的字符串并不表示日期,则该方法会返回 NaN 。如果直接把表示日期的字
符串传给 Date 构造函数,那么 Date 会在后台调用 Date.parse() 。


Date.UTC()

Date.UTC() 方法也返回日期的毫秒表示,但使用的是跟 Date.parse() 不同的信息来生成这个值。
传给 Date.UTC() 的参数是年、零起点月数(1 月是 0,2 月是 1,以此类推)、日(1-31)、时(0-23)、
分、秒和毫秒。
这些参数中,只有前两个(年和月)是必需的。
如果不提供日,那么默认为 1 日。其他参数的默认值都是 0。

继承方法

与其他类型一样, Date 类型重写了 toLocaleString() 、 toString() 和 valueOf() 方法。但与
其他类型不同,重写后这些方法的返回值不一样。 Date 类型的 toLocaleString() 方法返回与浏览器
运行的本地环境一致的日期和时间。这通常意味着格式中包含针对时间的 AM(上午)或 PM(下午),
但不包含时区信息(具体格式可能因浏览器而不同)。 toString() 方法通常返回带时区信息的日期和时
间,而时间也是以 24 小时制(0~23)表示的。
Date 类型的 valueOf() 方法根本就不返回字符串,这个方法被重写后返回的是日期的毫秒表示。
因此,操作符(如小于号和大于号)可以直接使用它返回的值。(时间在前的数值小)
date继承方法

日期格式化方法

由于会因浏览器而异,因此不能用于用户界面上一致地日期显示。

日期/时间组件方法

方法 说明
getTime() 返回表示日期的毫秒数;与valueOf()方法返回的值相同
setTime(毫秒) 以毫秒数设置日期,会改变整个日期
getFullYear() 取得4位数的年份(如2007而非仅07)
getUTCFullYear() 返回UTC日期的4位数年份
setFullYear(年) 设置日期的年份。传入的年份值必须是4位数字(如2007而非仅07)
setUTCFullYear(年) 设置UTC日期的年份。传入的年份值必须是4位数字(如2007而非仅07)
getMonth() 返回日期中的月份,其中0表示一月,11表示十二月
getUTCMonth() 返回UTC日期中的月份,其中0表示一月,11表示十二月
setMonth(月) 设置日期的月份。传入的月份值必须大于0,超过11则增加年份
setUTCMonth(月) 设置UTC日期的月份。传入的月份值必须大于0,超过11则增加年份
getDate() 返回日期月份中的天数(1到31)
getUTCDate() 返回UTC日期月份中的天数(1到31)
setDate(日) 设置日期月份中的天数。如果传入的值超过了该月中应有的天数,则增加月份
setUTCDate(日) 设置UTC日期月份中的天数。如果传入的值超过了该月中应有的天数,则增加月份
getDay() 返回日期中星期的星期几(其中0表示星期日,6表示星期六)
getUTCDay() 返回UTC日期中星期的星期几(其中0表示星期日,6表示星期六)
getHours() 返回日期中的小时数(0到23)
getUTCHours() 返回UTC日期中的小时数(0到23)
setHours(时) 设置日期中的小时数。传入的值超过了23则增加月份中的天数
setUTCHours(时) 设置UTC日期中的小时数。传入的值超过了23则增加月份中的天数
getMinutes() 返回日期中的分钟数(0到59)
getUTCMinutes() 返回UTC日期中的分钟数(0到59)
setMinutes(分) 设置日期中的分钟数。传入的值超过59则增加小时数
setUTCMinutes(分) 设置UTC日期中的分钟数。传入的值超过59则增加小时数
getSeconds() 返回日期中的秒数(0到59)
getUTCSeconds() 返回UTC日期中的秒数(0到59)
setSeconds(秒) 设置日期中的秒数。传入的值超过了59会增加分钟数
setUTCSeconds(秒) 设置UTC日期中的秒数。传入的值超过了59会增加分钟数
getMilliseconds() 返回日期中的毫秒数
getUTCMilliseconds() 返回UTC日期中的毫秒数
setMilliseconds(毫秒) 设置日期中的毫秒数
setUTCMilliseconds(毫秒) 设置UTC日期中的毫秒数设置UTC日期中的毫秒数
getTimezoneOffset() 返回本地时间与UTC时间相差的分钟数。例如,美国东部标准时间返回300。在某 地进入夏令时的情况下,这个值会有所变化

业务分析与实践总结

以淘宝订单、联想乐呗订单为例

淘宝订单年月日时分秒
联想乐呗订单年月日时分秒
可以看到这种时间显示都是年月日时分秒的格式.
订单日期显示
文件及文档可以访问moment.js中文网
http://cdn.staticfile.org/moment.js/2.24.0/moment.js
http://cdn.staticfile.org/moment.js/2.24.0/moment-with-locales.js