JS标准库系列(五)—— Date对象
一、Date作为工具函数
Date
对象是JS提供的日期和时间的操作接口。
Date
对象作为工具函数直接使用,不管有没有参数,都是返回当前时间的字符串。
二、new Date()
Date
还可以当作构造函数使用,返回一个Date
对象的实例,如果不加参数,生成的就是代表当前时间的对象。
var today = new Date();
这个Date
实例对应的字符串值,就是当前时间。
同时作为构造函数,里面还可以接受多种形式的参数。
[ 注 ]:北京时间,又名中国标准时间(CST
),是中国大陆的标准时间,比世界协调时快八小时(即UTC+8
),或者是比格林威治时间快八小时(即GMT+8
),因为格林威治时间(GMT
)和世界协调时间(UTC
)处于同个时区。
2.1、new Date(milliseconds)
将你要得到的那个日期转化成毫秒数,时间是从1970年1月1日00:00:00 UTC
开始计算的。
// 将1970年1月2日的 零时 转为时间对象
//注意,这里是零时,那东八区就会+8
var Jan02_1970 = new Date( 24* 60 * 60 * 1000);
// Fri Jan 02 1970 08:00:00 GMT+0800(中国标准时间)
// 将1969年12月31日的零时转为时间对象
var Dec31_1969 = new Date(- 24 * 60 * 60 * 1000);
// Wed Dec 31 1969 08:00:00 GMT+0800(中国标准时间)
上面最后一个例子说明,Date
构造函数的参数可以是一个负数,表示1970年1月1日之前的时间。
2.2、new Date(datestring)
Date
对象还接受一个日期字符串作为参数,返回所对应的时间。
new Date('Jan 2, 2017');
// Mon Jan 02 2017 00:00:00 GMT+0800 (中国标准时间)
对于YYYY-MM-DD
形式的字符串,JavaScript引擎可能会将其当作ISO格式来解析,采用格林尼治时区作为计时标准;而对于其他格式的日期字符串,一律视为非ISO格式,采用本地时区作为计时标准。
2.3、new Date(year, month [, date, hours, minutes, seconds, ms])
Date
对象还可以接受多个整数作为参数,依次表示年、月、日、小时、分钟、秒和毫秒。如果采用这种格式,最少需要提供两个参数(年和月),其他参数都是可选的。
注意:月份从0开始计算,日期date默认为1,其它默认为0。
多个整数作为参数三、日期的运算
类型转换时,Date
对象的实例如果转为数值,则等于对应的毫秒数;
如果转为字符串,则等于对应的日期字符串。
所以,两个日期对象进行减法运算,返回的就是它们间隔的毫秒数;进行加法运算,返回的就是连接后的两个字符串。
四、Date对象的静态方法
4.1、Date.now() [ 当前时间是CST时间,会转成GMT时间计算 ]
Date.now
方法返回当前时间的UTC
时间距离1970年1月1日 00:00:00 UTC
的毫秒数。
验证这个当前是个什么时间?
假设我电脑现在显示2017年1月2日 11:15:00 CST
这是东八区时间,那要先转化为UTC时间-8
即2017年1月2日 03:15:00 UTC
然后计算这个时间距离1970年1月1日 00:00:00 UTC
的毫秒数。
4.2、Date.parse() [ 参数是CST或GMT,是CST则转成GMT时间计算 ]
Date.parse
方法用来解析日期字符串,返回距离1970年1月1日 00:00:00 UTC
的毫秒数。
如果解析失败,返回NaN。
参数的区别4.3、Date.UTC() [ 参数是GMT无需转换 ]
该方法接受年、月、日等变量作为参数,参数就是UTC
时间,返回距离1970年1月1日 00:00:00 UTC
的毫秒数。
现在发现有点懵B,这些个方法,参数,时区,得到的结果让人摸不着头脑,甚是玄乎啊,不知道怎么记忆。
三者的区别比较五、Date实例对象的方法
Date
的实例对象,有几十个自己的方法,分为以下三类。
- to类:从Date对象返回一个字符串,表示指定的时间。
- get类:获取Date对象的日期和时间。
- set类:设置Date对象的日期和时间。
5.1、to类方法
常见的to类方法toString:返回当前时区的完整日期字符串;
toUTCString:返回返回对应的UTC时间完整日期字符串;
toDateString:返回日期字符串;
toTimeString:返回时间字符串;
toLocaleTimeString:返回一个字符串,代表时间的当地写法。
5.2、get类方法
Date
对象提供了一系列get*
方法,用来获取实例对象某个方面的值。
get*方法getFullYear: 获取实例的四位年份;
getMonth:获取月份(0表1月,11表12月);
getDate:获取几号;
getDay:获取星期(0为星期日,1为星期一);
getHours:返回小时;
getMinutes:返回分钟;
getSeconds:返回秒;
getMilliseconds:返回毫秒;
getTime():返回距离1970年1月1日00:00:00的毫秒数,相当于valueOf();
5.3、set类方法
Date
对象提供了一系列set*
方法,用来设置实例对象的各个方面。
set*方法setFullYear:设置实例的四位年份;
setMonth:设置月份;
setDate:设置日子;
setHours:设置小时;
setMinutes:设置分钟;
setSeconds:设置秒;
setMilliseconds:设置毫秒;
setTime:设置毫秒时间戳;
(本系列下一节为 — Math对象)