JavaScript Date对象更进一步
总结分享这个近期开发解决的一个Bug。
Javascript的Date对象具有容错性,会自动根据当年的日期根据设置的属性值转换,也就是说Date对象的setDate会影响setMonth,而month会影响到setFullYear。
如果单独使用setDate、setMonth、setFullYear初始化Date对象的时候,Date未及时被初始化的属性会在你设置其他属性的时候影响到其他的属性值,
一般情况下,只会有setDate产生的影响所致,所以初始化应该由最基本的单元开始。
表达的有点晕,代码示例。
<html> <head> <script type="text/javascript"> //初始化一个Date对象,表示2014-07-31 var date = new Date(); date.setDate(31); date.setMonth(6); date.setFullYear(2014); //错误的设值方式 function wrongDate(date){ date.setFullYear(2014); document.write(date + "<br />"); date.setMonth(5); document.write(date + "<br />"); //这个时候date是2014-06-31被自动转换成2014-07-01 date.setDate(13); //当时认为date应该是2014-06-13,其实是2014-07-13 document.write(date + "<br />"); } //正确的设值方式 function correctDate(){ date.setDate(13); date.setMonth(5); date.setFullYear(2014); document.write(date + "<br />"); date.setMonth(5,13); date.setFullYear(2014); document.write(date + "<br />"); date.setFullYear(2014,5,13); document.write(date + "<br />"); } wrongDate(date); document.write("<br />----------------下面才是正确的---------------<br />"); correctDate(date); </script> </head> <body></body> </html>
执行效果:
Thu Jul 31 2014 00:14:59 GMT+0800 (中国标准时间)
Tue Jul 01 2014 00:14:59 GMT+0800 (中国标准时间)
Sun Jul 13 2014 00:14:59 GMT+0800 (中国标准时间)
----------------下面才是正确的---------------
Fri Jun 13 2014 00:14:59 GMT+0800 (中国标准时间)
Fri Jun 13 2014 00:14:59 GMT+0800 (中国标准时间)
Fri Jun 13 2014 00:14:59 GMT+0800 (中国标准时间)
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。