DateのsetMonthではまった

javascriptのDateのsetMonthにやられたのでメモ。
月末とかではまる。

コード

<html><body>
<script type="text/javascript">
  var d = new Date(); // 8月31日
  document.write(d + "<br>");
  var month = d.getMonth(); // 8月なので7
  document.write(month + "<br>");
  d.setMonth(month + 1); // +1ヶ月しようとした
  document.write(d.getMonth() + "<br>");
  document.write(d);
</script>
</body></html>

出力(IE8)

Tue Aug 31 15:30:16 UTC+0900 2010
7
9
Fri Oct 1 15:30:16 UTC+0900 2010 

IEでもFirefoxでもChromeでも同じ。挙動わかってないとやらかしてしまいそうだ。
実際のコードではこのあとにsetDateで日を指定してた(翌月の指定の日を得るため)のだが、末日だと案の定おかしくなった。setDateを先に行うことで回避。