2011年6月7日火曜日

ActiveSupportの便利メソッド(日付編)

RailsではActiveSupportで実装された日付に関する便利なメソッドがあります。
d = Date.parse("2011/06/07")

d.tomorrow #=> 2011/06/08(明日)
d.yesterday #=> 2011/06/06(昨日)
d.beginning_of_month #=> 2011/06/01(月初)
d.end_of_month #=> 2011/06/30(月末)
d.months_ago(2) #=> 2011/04/07(2ヶ月前)
d.months_since(2) #=> 2011/08/07(2ヶ月後)
英文のように表現できますね。
ところで、5月31日の1ヶ月前はいつになるのでしょうか。
d = Date.parse("2011/05/31")
d.months_ago(1) #=> 2011/04/30
月末とみるのでしょうか。じゃあ5月30日の1ヶ月前は?
d = Date.parse("2011/05/30")
d.months_ago(1) #=> 2011/04/30
これには納得。しかし、5月31日と30日の1ヶ月前が同じになるということはバッチ処理とかで1ヶ月後に1回だけ行いたい場合には注意が必要ですね。

days_sinceといったメソッドはないようですが、3日後はどうやって実装するのでしょうか。
d.since(3.day)
sinceには秒で渡します。しかし、これだとDateTime型が返ってきます。Date型がほしい場合は、
d.since(3.day).to_date
とすればOKです。

ActiveSupportのドキュメントは下記です。
http://as.rubyonrails.org/

0 件のコメント:

コメントを投稿