2012-01-26 3 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

한 가지 질문 : 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