作者:堅強一點
鏈接:https://zhuanlan.zhihu.com/p/22253858
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
在寫js 日歷插件的時候遇到一個奇怪的情況。
日歷當前的日期是 2016-08-31 號 用? js Date 類型保存的當前日期
var currDate = new Date(); // 初始化的時候的當期日期,
當我點擊下一個月的時候,直接取出當期日期的月份,然后 +1
直接重置 currDate 的月份 的代碼ru
currDate.setMonth(currDate.getMonth() + 1);
在大部分情況下這種做法是沒有問題的。
但是如果當前月份是 2016-08-31 的時候,我取出當期月份然后+1最后的結果是2016-10-01
月份增加了2月,而不是想象中的只增加了一個月,如果細心的人已經發現了,日期的天數變化,從31號變到了1號,其實問題也就出現在這里。
因為當我使用“currDate.setMonth(currDate.getMonth() + 1);”這段代碼重置月份的時候,
最后的結果是 2016-09-31,但是實際情況是,2016-09月份的時候只要30填,沒有31號,所以日期就自動往后延期了一天變成了2016-10-01
所以最后我把重置的代碼改成了如下
currDate.setMonth(currDate.getMonth() + 1);
currDate.setDate(1);
手動吧日期放到了第一天,心想這下應該沒問題了。結果實際情況一點都沒變。還是從2016-08-31 直接跳到了2016-10-01。
其實問題還是一樣的情況,因為在執行 currDate.setMonth(currDate.getMonth() + 1); 這段代碼的時候? currDate 已經是? 2016-10-01 號了,這個時候在執行
currDate.setDate(1);這段代碼的時候 只是吧 當前月份的日期重置到了1號,所以沒有任何變化。
最后把代碼改成了
currDate.setDate(1);
currDate.setMonth(currDate.getMonth() + 1);
解決問題。