7
6

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.

JavaScriptのsetMonthについて

Posted at

JavaScriptで日付(主に月)の加算・減算をしたい人必見!!!

やり方をググると、色々なページで解説がありますね。
僕もググりました。殆どがsetMonthを使ってますね!

javascript
var date = new Date('2015/1/31');
date.setMonth(date.getMonth()+1);

「「「しかし、、、コレちょっと危険なんです!!」」」

上記のコードを実行して、dateの中身をみてください。

期待した結果:2015/02/28
実際:2015/03/03

おそらくですが、
2月31日(あり得ない) - 2月28日(現実) = 3日
2月28日(現実) + 3日(あまった日数) = 2015/3/3(結果)
このような計算が行われていると思われます。
今回は加算でしたが、減算でも起こり得ます。

なぜこうなったのか。。。ヒントはwikiにありました。

JavaScriptという言葉は狭義にはMozillaが仕様を策定し実装しているスクリプト言語を指す。このスクリプト言語はEcmaインターナショナルでECMAScript (ECMA-262) として標準化されており、多くのWebブラウザー等はこの標準化されたECMAScriptを実装している。(https://ja.wikipedia.org/wiki/JavaScript)

上記の文にあるECMAScriptのリファレンスを読んでみると。。。。。
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.5.38
ここにしっかりと書いてあるっぽい。

気をつけて

きっと知らずに使っている方はいっぱいいらっしゃいます。
みなさん気をつけてくだせぇ!!!

ライブラリを使って解決したり、月初でsetMonthやったりと、
対策もたくさんあります!
一番良いのは何かを考えながら実装するのも楽しいですね!

7
6
0

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
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?