|
|
9 |
|
[解決方法]
DATEクラスの日付や時刻を設定するメソッドに、setFullYearメソッド、setMonthメソッド、setDateメソッドといったset[XXXXX]メソッドがいくつか用意されていますが、これらのメソッドの実行順には注意が必要です。
メソッドの実行が適切な順序で行われないと、日付の値の設定が正しくできない場合があります。
下記のサンプルは、日時に「2011/4/1」を設定する処理を行いますが、現在(システム)日付が「XXXX/03/31」の場合、月を設定した際に不正な日付「2011/4/31」を設定しようとして値がクリアされ、正しい日付が設定できません。
[サンプルコード1]
var dayTm = new Date(); → 現在の日付「XXXX/3/31」で初期化
dayTm.setFullYear(2011); → 年を「2011」に設定し「2011/3/31」
dayTm.setMonth(3); → 月に「4」を設定し、不正な日付
「2011/4/31」となり「0」でクリア
dayTm.setDate(1); → クリアされた値の日に「1」を設定、
不正な日付「0000/0/1」となり
値が正しく設定されない |
上記のような現象は、set[XXXXX]メソッドが指定されていない日付パラメータへ現在(システム)日付を値として利用するために発生いたします。
正しく、現在日付を取得する為には、日付の設定内容によってメソッドの実行順を入替える必要があります。
下記は、「2011/4/1」が正しくの設定できるよう、メソッドの順を入替えたサンプルです。
[サンプルコード2]
var dayTm = new Date(); → 現在の日付「XXXX/3/31」で初期化
dayTm.setFullYear(2011); → 年を「2011」に設定し「2011/3/31」
dayTm.setDate(1); → 日を「1」に設定し「2011/3/1」
dayTm.setMonth(3); → 月を「4」に設定し「2011/4/1」 |
サンプルソースは、月初の日付(1日)を設定する処理を行っているため上記のような処理順で正しく日付を設定する事ができますが、月末日を設定する場合には、処理する月によって月の設定を先におこなったり、日の設定を先に行うといった分岐処理が必要になる場合があります。
ですが、確認作業も増えてしまうためあまり効率的ではありません。
月末日を設定するような処理であれば、下記のような設定方法がスムーズです。
[サンプルコード3]
(1)setFullYearメソッドで年月日を設定
var dayTm = new Date();
dayTm.setFullYear(2011,3,1);
(2)setMonthメソッドで月日を設定
var dayTm = new Date();
dayTm.setFullYear(2011);
dayTm.setMonth(3,31);
|
setFullYearメソッドでは年月日を一括で設定でき、setMonthメソッドでは月日を一括で設定が可能です。
このように、設定する日付によってメソッドの実行順にご注意ください。
|
|