Rubyで直前の日曜日の日時を求める
rrdgraphで日曜日始まりの1週間グラフを書きたい時に必要なので.
UNIX時間で0,Time.at(0)がGMTで木曜日の0時なので3日とgmt_offset分だけ平行移動すると,日曜日の0時が1週間(7*86400)で割り切れる値になるので端数を除去,ずらした分だけ元に戻すと直前の日曜日の0時の時刻が得られる.
def last_sunday(t) slide = 3*86400 - t.gmt_offset t = t.to_i - slide return Time.at(t-t%(7*86400)) + slide end p Time.now p last_sunday(Time.now) p last_sunday(Time.now-86400)
% ruby last_sunday.rb Sun Aug 21 17:13:42 +0900 2011 Sun Aug 21 00:00:00 +0900 2011 Sun Aug 14 00:00:00 +0900 2011