Ruby で日付を扱うときに、active_support (rails をインストールすると一緒に入ってくるライブラリ) が凄い便利なんです!!ぐだぐだ説明するよりもコードを見たほうが早いと思うのでどうぞ。

#!/usr/bin/ruby
 
require 'rubygems'
require 'active_support'
 
t = Time.now # Mon Sep 07 00:24:07 +0900 2009
 
t - 5.days  # 5日前   (Wed Sep 02 00:24:07 +0900 2009)
t - 1.week  # 1週間前 (Mon Aug 31 00:24:07 +0900 2009)
t - 2.years # 2年前   (Fri Sep 07 00:24:07 +0900 2007)
 
# xxx前には ago を使う
1.hour.ago # 1日前 (Sun Sep 06 23:24:07 +0900 2009)
 
# xxx後には since を使う
2.days.since # 2日後 (Wed Sep 09 00:26:07 +0900 2009)
 
t.yesterday # Mon Sep 06 00:24:07 +0900 2009
t.tomorrow  # Mon Sep 08 00:24:07 +0900 2009

t.beginning_of_month # 月初め  (Tue Sep 01 00:00:00 0900 2009)
t.last_month         # 1ヶ月前 (Fri Aug 07 00:24:07 0900 2009)

2.minutes.ago.class # Time クラスが返る

素晴らしく直感的です!それぞれ複数形には単数形が用意されているため、1.days とか書かずに 1.day と書けるためとてもわかりやすいですよね。ago と since にもそれぞれ until と from_now という alias が用意されているようです。ざっと見たけどこんな感じ。

# ...lib/active_support/core_ext/numeric/time.rb
alias :second   :seconds
alias :minute   :minutes
alias :hour     :hours
alias :day      :days
alias :week     :weeks
alias :until    :ago
alias :from_now :since

また、Time クラスだけではなく、Date クラスでも同じように操作することができます。

#!/usr/bin/ruby
 
require 'rubygems'
require 'active_support'
 
d = Date.today # Mon, 07 Sep 2009

d - 2.days # 2日前 (Sat, 05 Sep 2009)
 
(d - 2.days).class # Date クラスが返る
(d - 1.hour).class # 自動的にキャストされて Time クラスが返る

ここまで直感的に操作できると、日付を触るのが楽しくなってきますね。どんどん使ってわかりやすい、かっこいいコードを書いていきましょ〜。
このエントリーをはてなブックマークに追加