GAS Date 2月だけに起こるバグ
4132 ワード
条件
GAS で 下記のコード
target = new Date('4:00:00 AM');
とすると
Sat Dec 30 1899 10:00:00 GMT+0900 (Japan Standard Time) {}
と解釈される
2月1日に
const now = new Date();
target.setFullYear(now.getFullYear());
target.setMonth(now.getMonth());
target.setDate(now.getDate());
すると
target.setFullYear(2021);
target.setMonth(1); // 0から始まるので 1は2月
target.setDate(1);
と実行される
期待値
これを実行すると
Mon Feb 01 2021 10:00:00 GMT+0900 (Japan Standard Time)
となって欲しい
発生した事象
しかし実際にこれを実行すると
Mon Mar 01 2021 10:00:00 GMT+0900 (Japan Standard Time)
あれ?
原因
target.setFullYear(2021);
// Thu Dec 30 2021 10:00:00 GMT+0900 (Japan Standard Time) 単純に年が2021となる
target.setMonth(1);
//Tue Mar 02 2021 10:00:00 GMT+0900 (Japan Standard Time) 2月30日つまり 3月2日と解釈される
target.setDate(1)
//Mon Mar 01 2021 10:00:00 GMT+0900 (Japan Standard Time) 3月2日 の"日"の部分が 1になる
target.setFullYear(2021);
// Thu Dec 30 2021 10:00:00 GMT+0900 (Japan Standard Time) 単純に年が2021となる
target.setMonth(1);
//Tue Mar 02 2021 10:00:00 GMT+0900 (Japan Standard Time) 2月30日つまり 3月2日と解釈される
target.setDate(1)
//Mon Mar 01 2021 10:00:00 GMT+0900 (Japan Standard Time) 3月2日 の"日"の部分が 1になる
なるほどなるほど 2月だけ30日がないから
今まで問題なかったけど 本来は 日付を30->1にしないと 正しく動かないのか
解決策
const now = new Date();
target.setFullYear(now.getFullYear());
target.setMonth(now.getMonth(),1); //日付を30->1にする
target.setDate(now.getDate());
const now = new Date();
target.setFullYear(now.getFullYear());
target.setMonth(now.getMonth(),1); //日付を30->1にする
target.setDate(now.getDate());
Author And Source
この問題について(GAS Date 2月だけに起こるバグ), 我々は、より多くの情報をここで見つけました https://qiita.com/freddiefujiwara/items/7296955d8c692069a318著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .