2012-01-26 5 views
1

私は、経過した、または残っている年の%を(動的に)計算しようとしています。経過した/残っている年のパーセントを計算していますか?

たとえば、今年の25日が過ぎ、その年に366日があるので、私は25/366をしたいと思いますが、明らかに25は毎日変わります。

私はしかし、私はそこでなければならないと確信している、これらのメソッドに/は、例えば表現

t = Time.now #=> 2007-11-19 08:27:03 -0600 
t.day   #=> 19 
t = Time.now #=> 2007-11-19 08:27:30 -0600 
t.mon   #=> 11 

を切り替えるケースを使用して、これを行うには長い道のりの

if t.mon == 1 
    @year = t.day/366 

if t.mon == 2 
    @year = (t.day + 31)/ 366 

    if t.mon == 3 
    @year = (t.day + 60)/ 366 //60 (or 59) equals number of days in January and Feb etc 

のようなものを考えましたこれを行うより良い方法。日・アット・時間粒度については

答えて

2

require 'date' 

today   = Date.today 
days_this_year = Date.new(today.year, 12, 31).yday 
pct_done  = 100.0 * today.yday/days_this_year 
#=> 7.1038 

また、あなたはの粒度をしたい場合に、秒精度(およびDate上の依存関係のない):

now = Time.now 
year_start = Time.new(now.year , 1, 1) 
year_end = Time.new(now.year+1, 1, 1) 
pct_done = 100.0 * (now - year_start)/(year_end - year_start) 
#=> 6.8338  
+0

:) – Leahcim

+0

1つの質問:Railsで '日付'が必要ですか?あなたはイニシャライザに入れますか? – Leahcim

+0

私は分かりません。私はRailsではなく[Sinatra](http://sinatrarb.com)を使用しています。私は、ActiveSupportがすでにDateを取得していることを強く疑う。試してみるのは簡単ですよね? – Phrogz

1

require 'time'

(Time.now.yday.to_f/Time.parse("#{Time.now.year}-12-31").yday.to_f * 100).round

+0

ありがとうございました。 – Leahcim