久しぶりに JavaScript の month にハマった。
2017.04.20 11:10
ノマドです。
とあるコンテンツにて JavaScript で取得した日付けの曜日がおかしいという不具合がありました。
不具合をさらに調べると、どうやら次月の日にちの曜日が今月の日にちの曜日に表示されてしまっている不具合でした。
JavaScript で月がひと月ずれるというのは、アレです。そうです getMonth() です。getMonth() は、0-11 の数値を返すので getMonth() + 1 をする必要があるのです。
しかし、今回は違いました。getMonth() じゃなくて new Date() でした。
JavaScript を普段から書いている方からすると、当然ですよというレベルかと思いますが、素人の私は知りませんでした。
new Date() で任意の日付けのオブジェクトを生成する際の引数のフォーマットで month の解釈が異なるということ。
具体的には、こんな感じです。
// カンマ区切りで日時を指定。 var date1 = new Date(2017, 1, 1, 0, 0); console.log(date1); // "Wed Feb 01 2017 00:00:00 GMT+0900 (JST)" // 文字列で日時を指定。 var date2 = new Date(2017 + "/" + 1 + "/" + 1 + "/ " + 0 + ":" + 0); console.log(date2); // "Sun Jan 01 2017 00:00:00 GMT+0900 (JST)" // カンマ区切りで日時を指定。(month は -1 する。) var date3 = new Date(2017, 1 - 1, 1, 0, 0); console.log(date3); // "Sun Jan 01 2017 00:00:00 GMT+0900 (JST)"
ということで、new Date() の 引数によって month の値が変わるのです。
JavaScript の month 周りは、注意が必要ですね。
以上、ノマドでした〜。
関連コンテンツ
【Tech】No space left on device ディスクの空きが無くなったらしい。。
【Tech】【重要】他の端末のLINEから、あなたの電話番号による認証が要求されました。Facebook の設定を確認しよう!
【Tech】「ご利用の Apple ID がブラウザ上の Apple Store へのサインインに使用されました」というメールが来た。
【Tech】SIM Free の iPad mini 用に OCN SIM 買ってみた。
【Tech】アドセンス「広告クローラのエラーが生じており、収益の損失が発生する可能性があります。」が表示される。
【Tech】お名前ドッコムのバックオーダーでドメインを取得してみた。
【Tech】Google の経路情報誤送信による大規模通信障害が発生。ネットの障害に対して個人ができる準備。
【Tech】Search Console にて「一般的な HTTP エラー: ドメイン名が見つかりません」でサイトマップを追加できない。
【Tech】Postfix のエラーを受信。scanner.sslsonar.org に突っつかれたよ。