32
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

年に数日だけ発現する日付の自動補正を発端とした罠

Last updated at Posted at 2015-03-30

JavaScriptではよくあるこんな罠があります。

2015/4/1のDateオブジェクトを作ろうとするバグを含むコーディング例
var d = new Date();
d.setFullYear(2015);
d.setMonth(3); // 0オリジンで4月
d.setDate(1);
d // Fri May 01 2015 … 5月になっている

ちょうど投稿日の2015/3/31のような日付で実行すると再現するのですが、
3行目のsetMonthの所で2015/4/31になり、即時補正されて2015/5/1になります。
特定の日時が欲しい時はコンストラクタを使うか、先にsetDate(1)としておくのが無難そうです。
JavaScriptに限らずsetMonthnext monthといった単語が目に入ったら「もし31日に実行したら…」と想像する癖をつけるのが良いと思います。
日付の自動補正関係は時限爆弾になるので気をつけたいですね。

罠についてはこちらも参考になります。
JavaScript の Date は罠が多すぎる - Qiita
コンストラクタに文字列を与える時のブラウザ間の差異はこちらが参考になります。
Dateオブジェクト (日付と時刻) | JavaScript プログラミング解説

32
29
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?