读书笔记:ES5-Date

Date类型

Date类型使用自UTC(国际协调时间)1970年1月1日午夜(零时)开始经过的毫秒数来保存日期

1
2
//不传参数自动获取当前的日期和时间,如果传指定参数需要是毫秒数
var now = new Date()

为简化传参数是毫秒数的情况,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时间相差的分钟数