计算经过/剩余的年份百分比?

时间:2012-01-26 07:04:36

标签: ruby-on-rails ruby

我正在尝试(动态)计算已经过去或已经过去的年份的百分比。

例如,今年的25天过去了,一年中有366天,所以我想做25/366,但显然25每天都会改变。

我想了很多方法,使用这些方法做一个case / switch表达式

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 个答案:

答案 0 :(得分: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    

答案 1 :(得分:1)

require 'time'

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