我正在尝试(动态)计算已经过去或已经过去的年份的百分比。
例如,今年的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
但是,我确信必须有更好的方法来做到这一点。
答案 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