Date类型
Date类型使用自UTC(国际协调时间)1970年1月1日午夜(零时)开始经过的毫秒数来保存日期
1 | //不传参数自动获取当前的日期和时间,如果传指定参数需要是毫秒数 |
为简化传参数是毫秒数的情况,ECMAScript提供两个方法:Date.parse()/Date.UTC()
Date.parse() => 参数是日期字符串,根据字符串返回相应日期的毫秒数,但是没有规定日期格式,所以行为由实现而异,通常因地域而异

⚠️基本上可以识别月/日/年格式和年/月/日格式,不能识别的格式会返回NaN
⚠️如果将日期字符串传递给构造函数,其实会自动调用Date.parse(),最终生成此时间的日期对象(注意是先调用Date.parse()生成毫秒数再调用构造函数生成日期对象)如下图:

补充一下,并不是红皮书上介绍的浏览器能识别5月32日的字符串只是浏览器表现各异

Date.UTC() => 参数是年份、基于0的月份(0-11)、哪一天(1-31)、小时数(0-23)、分钟、秒、毫秒,但是只有年份和月份是必须的,天数不传默认是1,分钟/秒/毫秒不传都是0

构造函数同样也会模仿Date.UTC(),但是不同的是,日期和时间都是基于本地时区而非GMT来创建

⚠️传入的月份参数是5代表是6月份
Date.now() => 调用这个方法时的日期和时间的毫秒数,简化使用Date对象分析代码工作,IE9+
不支持的可以使用+new Date()来获取时间戳(其实就是加号操作符吧。。)

继承方法
toLocalString()&toString(),不同浏览器表现不同(我只尝试了Safari和Chrome),仅在调试时有点用,展示时间方面其实没有用处


valueOf(),返回日期毫秒数,很方便比较大小

格式化方法
专门用于将日期格式化为字符串,同toString()和toLocalString()一样结果因浏览器而异toDateString()特定于实现的格式显示星期几、月、日、年totimeString()特定于实现的格式显示时、分、秒、时区toLocalDateString()特定于地区的格式显示星期几、月、日、年toLocalTimeString()特定于地区的格式显示时、分、秒、时区toUTCString()特定于实现的格式完整的UTC日期

⚠️没太理解特定于实现的格式/地区的格式到底是哪里来的格式。。
日期/时间组件方法(实例方法)
getTime()=>结果和valueOf()一样返回日期的毫秒数setTime()=>以毫秒数改变日期,会改变整个日期
getFullYear()=>获取4位年份setFullYear()=>设置年份,必须是4位数getUTCFullYear()=>获取UTC4位年份setUTCFullYear()=>设置UTC年份,必须是4位数
getMonth()=>获取月份(0-11)setMonth()=>设置月份,超过11会增加年份getUTCMonth()=>获取UTC月份(0-11)setUTCMonth()=>设置UTC月份,超过11会增加年份
getDate()=>获取月份中的天数(1-31)setDate()=>设置月份中的天数,如果超过天数则增加月份getUTCDate()=>获取UTC月份中的天数(1-31)setUTCDate()=>设置UTC月份中的天数,如果超过天数则增加月份
getDay()=>获取星期几(0代表星期日)getUTCDay()=>获取UTC星期几(0代表星期日)
getHours()=>获取小时(0-23)setHours()=>设置小时,超过23则增加天数getUTCHours()=>获取UTC小时,(0-23)setUTCHours()=>设置UTC小时,超过23则增加天数
getMinutes()=>获取分钟(0-59)setMinutes()=>设置分钟,超过59增加小时数getUTCMinutes()=>获取UTC分钟(0-59)setUTCMinutes()=>设置UTC分钟,超过59增加小时数
getSeconds()=>获取秒数(0-59)setSeconds()=>设置秒数,超过59增加分钟数getUTCSeconds()=>获取UTC秒数(0-59)setUTCSeconds()=>设置UTC秒数,超过59增加分钟数
getMilliseconds()=>获取毫秒数(0-999)setMilliseconds()=>设置毫秒数,超过999增加秒数getUTCMilliseconds()=>获取UTC毫秒数(0-999)setUTCMilliseconds()=>设置UTC毫秒数,超过999增加秒数
getTimezoneOffset()=>获取本地时间与UTC时间相差的分钟数