月のリスト項目を選択すると、年の値と月の値が取得され、月の 1 日の日付値と月の末日の日付値が計算されます。
正しいコードは次のとおりです:
< script language="javascript">
function selDate(y, m)
{
// 月の 1 日の文字列を出力します
document.form1. startDT.value=y "-" m " -1";
//翌月の年 (y) と月の値 (m) を計算します
if(m==12)
{
y ;
m=1;
}
else
{
m ;
// 翌月 1 日の日付値を生成します
var dt=new Date(y, m-1, 1); //月の値 0--11
//1 日の差 = 86400000、翌月の 1 日を数値に変換して減算、前月の最終日の Date 値を取得します。
var n=Date(dt);
var dt1=new Date(n); //月の末日の日付文字列を出力します
document.form1.stopDT.value=dt1. get Year() "-" (dt1.getMonth() 1) "-" dt1.getDate(); }
まず、「var dt =new Date(y, m-1, 1);」を「var dt=new Date(y, m、1);」。最後の文「dt1.getMonth()」は 1 を加算しません。ご想像のとおり、結果は「2010-2-28」ですが、出力は「2010-1-28」、「2010-1-31」の出力は「2010-0-31」になります。
最初は混乱しましたが、さらに試してみたところ、月の値の範囲が「1 ~ 12」ではなく「0 ~ 11」であることがわかりました。
次回しばらく JS を使用しないときにこの記事を思い出していただければ幸いです。