引言:前面两节我对 Object 与数组Array 及其方法进行了总结,篇幅很长,总结完后我感觉还是要多开几节来对第五章进行分节总结,不然排版的知识点看着的确是有些混乱。
总结的学习的确是很痛苦并快乐的,痛苦在于知识点真的很多,总结起来很累,如何选取精简的内容,怎么排版都是考虑之中。而快乐之处在于,总结知识点往往能让我静下来重新看待这些问题,然后温故而知新。总之,学习的道路是没有捷径的。这期间我也意识到,以前我以为看完一本书就是目标,往往那时候一本书看完自己是学不到什么的,如今恍然大悟,其实,我们学习的出发点不是看完一本书或者是看书,而是从书本里学习到知识,那才是我们看书的目的。
Date类型:
ECMAScript 中的Date 类型是在早起的 java .util.Dtae类型上构建的,所以 Date类型也是用“国际协调时间”,1970年1月1日 开始经过的毫秒数来保存日期。
创建Date对象:var now =new Date();
在调用 Date 构造函数而不传参的情况下,新创建的对象自动获得当前时间,如果想要获得指定时间,必须传递毫秒数(从1970年1月1日 开始计算的毫秒数),这样的方法十分麻烦。所以为了简化这一过程,ECMAScript 创建了两个方法:Date.parse( ) 和 Date.UTC( )。
Date.parse() 接收一个表示日期的字符串参数,然后根据这个参数返回相应的毫秒数。ECMA-262 没有定义 这个函数需要哪种固定的日期格式,所以这个方法的结果会因实际情况而异。
如果传入的参数字符串不能表示时间,则会返回NaN。 但是我们在 Date构造函数传递时间参数,那么在回台也会自动调用 Date.parse()。
例如: var now= new Date("2018/8/8");
Date.UTC(): 方法同样也返回表示日期的毫秒数,但是它与Date.parse() 构建值时使用不同的信息,Date.UTC () 的参数分别是年份,基于0的月份(一月是0 ,二月是1 以此类推)。月份是 1——31,小时是 1——23.秒以毫秒数。在这些参数中只有年数和月份是必须的。如果没有设定天数则假设天数为1 。其他参数省略的话,则默认为 0 。
举个例子:var now=new Date(Date.UTC(2018,0,1)); //Mon Jan 01 2018 08:00:00 GMT+0800 可以看到 0 是1月。
PS:ECMAScript 5 添加了Date.now():方法,返回调用这个方法时的日期和时间的毫秒数。所以我们可以在某段代码开始时调用这个函数。结束时有调用这个函数,然后二者相减就可以得出函数运行时间了。支持这个方法的函数有 IE9+、Firefox 3+、Safari3+、Opera10.5、和Chrome。
而不支持的浏览器可以用:var start =+new Date(); (使用+ 操作符转成字符串来操作。)
Date类型的继承的方法:
与其他类型一样,Date类型也重写了 toLocaleString()、toString()、和valueOf() 方法。但这些方法返回的值与其他类型不同。 Date类型的 toLocaleString()会按照与浏览器设置地区相适应的格式返回日期时间。
而其 toString() 则通常返回带有时区信息的日期和时间。(我个人理解:其实说那么多,toLocalseString() 不就是我们前面说过的根据环境返回值么)
至于 valueOf() 则不返回字符串,而是返回日期的毫秒数,例如:
var now=new Date(Date.UTC(2018,1,1));
alert(now.valueOf());// 1517443200000
日期的格式化方法:
Date类型还有一些专门用来将日期格式化的方法:
1、toDateString()——以特定格式显示时间(星期、月、日、年)。
2、toTimeString()——以特定格式显示时间(时、分、秒和时区)。
3、toLocaleString()——以特定时区显示时间(星期、月、日、年)。
4、toLocalseTIme()——以特定时区显示时间(时、分、秒)。
5、toUTCString()——以特定格式显示UTC时间。
非常让人值得吐槽的是这些方法的输出也和浏览器而异。所以显示的内容会因为浏览器不同而不一样。
日期 / 时间组件方法:
到目前为止,剩下还未介绍的 Date 类型的方法(如下表所示) ,都是直接取得和设置日期值中特
定部分的方法了。 需要注意的是, UTC 日期指的是在没有时区偏差的情况下 (将日期转换为 GMT 时间)
的日期值。
方 法 说 明
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日期中的毫秒数
getTimezoneOffset() 返回本地时间与UTC时间相差的分钟数。例如,美国东部标准时间返回300。在某 地进入夏令时的情况下,这个值会有所变化
-------------------------------------------------------------------------------------------------本章节完---------------------------------------------------------------------------------------------
这一章节着重总结了 引用类型中Date 类型的属性方法。
下章节预告:正则表达式,与 function 类型。