Gui*_*rme 6 ruby-on-rails activesupport
今天是2月29日:我们的测试破坏了.
我们的测试失败了,因为这些测试做的事情最终可以与这样的命令进行比较:Time.zone.now - 1.year + 1.year.它碰巧不等于Time.zone.now.
为什么会这样?为什么ActiveSupport不能在这样的计算中处理闰年?它是否适用于时间戳,这会阻止这类问题的发生?
小智 0
您可以使用 4 年而不是 1 年来达到相同的效果。(注:- 1.day,因为现在是 3 月 1 日)
(Time.zone.now - 1.day) - 4.year + 4.year
=> Mon, 29 Feb 2016 15:12:58 UTC +00:00
Run Code Online (Sandbox Code Playgroud)
值得注意的是(如下),无论日期如何。
Time.zone.now
=> Tue, 01 Mar 2016 15:11:51 UTC +00:00
Time.zone.now == Time.zone.now - 1.year + 1.year
=> false
Run Code Online (Sandbox Code Playgroud)
除非你使用beginning_of_day:
(Time.zone.now - 1.day).beginning_of_day == ((Time.zone.now - 1.day) - 4.year + 4.year).beginning_of_day
=> true
Run Code Online (Sandbox Code Playgroud)
另外,这取决于您实际想要做什么...您为什么要测试Time.now - 1.year + 1.year?
还...
1.year == 365.days
=> false
1.year == 365.25.days
=> true
Run Code Online (Sandbox Code Playgroud)