在Fixnum上调用时,为什么`from_now`错了?

时间:2012-02-06 18:08:40

标签: ruby-on-rails ruby testing yaml erb

我需要在yaml文件中存储一些时间段,如下所示:

test:
testing: <%= 1.month %>

我在这样的初始值设定项中获取数据:

Class::TIMES = YAML.load(ERB.new(File.new(Rails.root.join('config', 'times.yml')).read).result)

到目前为止一切顺利。但是我从中得到的时间总是在一天之内;测试显示了这一点例如:

<Tue, 06 Mar 2012> expected but was <Wed, 07 Mar 2012>.

测试线:

assert_equal 1.month.from_now.to_date, @object.finished_at.to_date

在其他地方,@ object的finished_at设置如下:

# duration is from the YAML file
self.finished_at = duration.from_now

无论我在YAML文件中放入什么时间段,它似乎总是在一天之内关闭。为什么会这样?

编辑:这似乎是Fixnums和from_now的问题:

> 1.month.from_now
 => Tue, 06 Mar 2012 21:05:00 UTC +00:00 

> 1.month.to_i.from_now
 => Wed, 07 Mar 2012 21:05:05 UTC +00:00

1 个答案:

答案 0 :(得分:2)

当你将1.month转换为一个整数时,它会任意设置传递到from_now到2592000秒的持续时间,即30天,无论它是什么月份。

之前我遇到过这个问题。查看Data and Time Helper Methods的文档。

  

虽然这些方法在使用时提供了精确的计算   上面的例子(“.. 1.month.from_now ..”),应注意注意   如果months’,年'的结果等,则不是这样   使用前转换