タイムスタンプのスマートな表示方法(Time#smart)を定義する
よく、update_atを表示するときに2008/07/19 09:28とかって
表示すると思うのですが、これは長い。スマートじゃない。
もちろんセクシーでもないです。
要点を考えると、今の時刻から1日未満だったら9:29といった感じで
時刻だけでいいし、3か月未満だったら7/15といった感じで
日付だけで良さそうだと思います。3か月以上だったら
4/12(2008)といった感じで年もついた方がいいかなと思います。
というわけで作ってみました。
以下をconfig/environment.rbに追加でもすればOKです。
class Time def smart(now=self.class.now) if (now-self).abs<86400 sprintf("%d:%02d",self.hour,self.min) elsif (now-self).abs<7776000 sprintf("%d/%02d",self.month,self.day) else sprintf("%d/%02d(%d)",self.month,self.day,self.year) end end end
実行結果
?> Time.now.smart => "12:36" >> Time.mktime(2008,8,20,9).smart => "9:00" >> Time.mktime(2008,8,18).smart => "8/18" >> Time.mktime(2008,4,20).smart => "4/20(2008)" >> Time.mktime(2007,8,20).smart => "8/20(2007)" >> Time.mktime(2008,8,25).smart => "8/25" >> Time.mktime(2009,8,25).smart => "8/25(2009)"
これだったらビューに
<td><%=h @user.created_at.smart %></td>
みたいに書くとかなり短く表示されますよね。
古いデータは時刻まで表示される必要はないし、
最近のデータは年まで表示される必要はないんですよ。