这篇文章写于2010年5月31日,是在工作时候遇到的一个问题,写的不好还望见谅:)

 

  

  上午经理问了我一个问题,关于下面这块代码为什么结果不对:

  

1 var sceneTime=new Date();
2 sceneTime.setYear(2010);
3 sceneTime.setMonth(5);
4 sceneTime.setDate(3);
5 sceneTime.setHours(09);
6 var sceneImgDir=”2010053109″;
7 alert(sceneTime.getMonth()+”,”+sceneTime.getDate());

 

  在JavaScript中,设置日期都是从0开始,11结束,但运行上面的代码,结果十分奇异,按理说预想中的结果应该是”5,3″,但实际上的结果是”6,3″,这相差可就是一个月啊。

  左思右想没明白,上网搜搜,觉得可能是日期溢出的问题,就是说如果设置的日期错误,那么月份就会被自动修正,但上面代码中的日期并没有溢出啊。

  原因没有找到,但是解决方法却找到了,那就是使用setMonth(month, day)这个方法进行设置,或者更进一步,在new Date(year, month, day)这里设置完成,这样结果就是正确的了。

  在解决问题后,我又仔细的在网络上搜索,终于找到一篇文章:程式怎麼寫 - javascript的setMonth有問題??!!,这里面提到的场景和我的基本一样,继续看下去,终于解决了我的疑惑:

    經過一番測試才發現,
    因為當時的日期是31日,
    所以用了setMonth(8)後,等於將時間設為9月的31日,因為九月只有30天,因此會將時間變成10月1日…
    所以執行完setMonth後,時間就變成10月1日,
    然後再setDate的話,那當然就變成了10月6日…
    所以後來想說那將setDate跟setMonth的順序改一下應該就可以了

  上面是从文章中引用的,而且我刚刚意识到:今天也是31日!