時間の表示をシンプルに

Gmailぽく時間をシンプルな文字列に変換するメソッドを書いてみました。素直に実装しています。

require 'time' # RFC2822_MONTH_NAME

class Time
  def to_s_simple(now = Time.now)
    if self.year == now.year
      if self.day == now.day
        sprintf('%d:%02d', self.hour, self.min)
      else
        sprintf('%s %d', 
                RFC2822_MONTH_NAME[self.month - 1], self.day)
      end
    else
      self.strftime('%y/%m/%d')
    end
  end
end

p Time.now # => Tue Feb 07 01:17:16 JST 2006
p Time.local(2005, 12, 31, 12, 34).to_s_simple # => "05/12/31"
p Time.local(2006, 2, 6, 12, 34).to_s_simple   # => "Feb 6"
p Time.local(2006, 2, 7, 12, 34).to_s_simple   # => "12:34"