日付取得関数について
- 0 名前: ハードミニマル : 2005/03/29 21:38
- はじめまして。
日付取得関数を使用した時の質問なんですが、よろしくお願いします。
var d_s=new Date();
var d_e=new Date();
d_s.setFullYear(hkstyear);
d_s.setMonth(eval(mm)-1);
d_s.setDate(eval(dd));
というようなコーディングで、
hkstyear=2005
mm=1
dd=1
という値を設定した場合、
Sat Jan 1 21:20:42 UTC+900 2005
が取得されるのですが、
hkstyear=2005
mm=2
dd=1
と設定した場合、
Tue Mar 1 21:21:57 UTC+900 2005
が取得されてしまいます。
また、
var d_s=new Date();
var d_e=new Date();
d_s.setDate(eval(dd));
d_s.setMonth(eval(mm)-1);
d_s.setFullYear(hkstyear);
というコーディングに変えた場合、
Tue Feb 1 21:24:10 UTC+900 2005
が取得されます。
単純に、
(修正前)setFullYear → setMonth → setDate
(修正後)setDate → setMonth → setFullYear
という具合に関数を使用する順番を変えただけなのですが。。。
日付を取得する関数を使用する場合には、
日 → 月 → 年
という順番で使用しないと正しく取得できないのでしょうか?
また、
年 → 月 → 日
という順番で使用した場合にも、正しく取得できないのは、2月だけなんです。
もし、ご存知の方がいらっしゃたら、教えていただけないでしょうか?
よろしくお願いします。
- 1 名前: みや : 2005/03/29 22:18
- そういえば今日は 3/29 ですね。
var d_s=new Date(); // →2005/03/29
d_s.setMonth(2-1); // →2 月にセット→2/29 は存在しない→2005/03/01
- 2 名前: ハードミニマル : 2005/03/30 11:30
- ありがとうございました。
今まで、正しく機能していたチェックが突然おかしくなって、
ちょっとしたパニックになっていたんですけど、
原因が分かって、すっきりしました。ありがとうございます。
ちなみに、解決方法は、取得する関数の順番を変えるのではなく、
変数を宣言する際に、システム日付ではなく、リテラルで1月1日を
設定するようにして、回避することにしました。