JavaScriptのDateオブジェクトを拡張して年月日の加減算を実装してみる
2015 年 11 月 9 日 by 山平JavaScriptのDateが不親切なのは周知の事実だと思いますが、以下のようなサイトを見つけました。
この記事によれば、setDate、setMonth、setYearに数字を入れれば良いだけ、ということになります。
じゃあ1日-1は0日とか、31日+1日は32日と言う指定の場合はどうなるのか、試してみました。
var date = new Date(2015, 12-1, 31); var func = function(d){ return [ d.getFullYear(), d.getMonth()+1, d.getDate() ].join('/'); }; //date date.setDate(date.getDate() + 1); console.log(func(date));//=>2016/1/1 date.setDate(date.getDate() - 1); console.log(func(date));//=>2015/12/31 //month date.setMonth(date.getMonth() + 1); console.log(func(date));//=>2016/1/31 date.setMonth(date.getMonth() - 1); console.log(func(date));//=>2015/12/31 //year date.setYear(date.getFullYear() + 1); console.log(func(date));//=>2016/12/31 date.setYear(date.getFullYear() - 1); console.log(func(date));//=>2015/12/31
うーん、ちゃんと動く。
これならdateAdd関数とかも作れてしまいそうですね。
試しに作ってみました。
Date.prototype.dateAdd = function dateAdd(days){ this.setDate(date.getDate() + days); }; Date.prototype.monthAdd = function monthAdd(months){ this.setMonth(date.getMonth() + months); }; Date.prototype.yearAdd = function yearAdd(years){ this.setYear(date.getFullYear() + years); }; var date = new Date(2015, 12 - 1, 31); var func = function(d){ return [ d.getFullYear(), d.getMonth()+1, d.getDate() ].join('/'); }; //date date.dateAdd(1); console.log(func(date));//=>2016/1/1 date.dateAdd(-1); console.log(func(date));//=>2015/12/31 //month date.monthAdd(1); console.log(func(date));//=>2016/1/31 date.monthAdd(-1); console.log(func(date));//=>2015/12/31 //year date.yearAdd(1); console.log(func(date));//=>2016/12/31 date.yearAdd(-1); console.log(func(date));//=>2015/12/31
こちらも期待通り。
最近のJavaScriptブーム?の影響で、グローバル領域だとか、組み込みオブジェクトへのお作法が厳しいので、このまま使えるかどうかは状況次第ですが、覚えておいて損はなさそうです。
以上です。
タグ: JavaScript