Dateインスタンスに月を設定して調べると、なぜか設定した値より1増えてしまうことがあります。
var my_date:Date();
my_date.month = 1;
trace(my_date.month); // 出力は2となることがある
確実に再現するには、つぎのフレームアクションを試します。
var my_date:Date = new Date(2010, 0, 31);
my_date.month = 1;
trace(my_date.month, my_date.date); // 出力: 2 3
Date.monthプロパティは、1月の0から始まる整数値です。つまり、生成したDateインスタンスには、1月31日が設定されています。その後、Date.monthプロパティに1つまり2月を設定すると、値が勝手に2つまり3月になってしまいます。
ただ、Date.dateプロパティの示す日の値が3になっていることに注目しましょう。これは、2010年の2月は28日が月末ですので、31日までの3日分が繰上がって3月3日になってしまったのです。
ActionScript 2.0では、気を利かせて月末に直してくれるようです。なお、ActionScript 2.0では、Dateクラスに上記のプロパティはありませんので、Date.setMonth()とDate.getMonth()およびDate.getDate()メソッドを用います。
var my_date:Date = new Date(2010, 0, 31);
my_date.setMonth(1);
trace([my_date.getMonth(), my_date.getDate()]); // 出力: 1,28
もっとも、JavaScriptで試すと、ActionScript 3.0と同じように3日繰上がります。したがって、この仕様変更はECMAScriptに則ったものといえそうです。
なお、ActionScript 3,.0でこの問題を避けるには、月だけでなく日も確実に設定することです。そのとき、Date.setMonth()メソッドを使うと、月と日を両方引数に渡せます。
var my_date:Date = new Date(2010, 0, 31);
my_date.setMonth(1, 1);
trace(my_date.month, my_date.date); // 出力: 1 1