月末近くの日付でsetMonth()を使うとバグる?
例えば5/31に、現在のDateから日付を作ると発生する模様。
現在の日時:2012/5/31 // 年月を設定(1日) nDate.setFullYear(nYear);//2012 nDate.setMonth(nMonth-1);//6-1 nDate.setDate(1); // 月初の曜日を取得 nFirstDay = nDate.getDay();
この場合getMonthをすると6月なので5が帰ってくるのが正解なのに6(7月)が帰ってくる。なんでやねん。
バグ?バグ?と思ったけど、バグではない。よく考えてみれば分かることだが…
現在の日時:2012/5/31 // 年月を設定(1日) nDate.setFullYear(nYear);//2012 //この時点でのnDate:2012/5/31 nDate.setMonth(nMonth-1);//6-1 //この時点でのnDate:2012/6/31→繰り上がって2012/7/1 nDate.setDate(1); //この時点でのnDate:2012/7/1 // 月初の曜日を取得 nFirstDay = nDate.getDay();
つまり最初のDayに31日が入っているので、月を代入したとき繰り上がってしまうということだ。
回避方法は、最初にDayを1日にしておけばいい
現在の日時:2012/5/31 // 年月を設定(1日) nDate.setDate(1); nDate.setFullYear(nYear);//2012 nDate.setMonth(nMonth-1);//6-1 // 月初の曜日を取得 nFirstDay = nDate.getDay();