日期类为今天和明天返回相同的 - 奇怪和有趣的错误

时间:2015-04-10 22:42:20

标签: ruby-on-rails ruby date

WEIRD

我们的rspec出现了奇怪的行为,就像在12点到5点之间的夜晚,我们的测试正在下降。 (我住在印度,GMT + 5.30)

在进一步检查时,这就是我所看到的

rails c
Loading development environment (Rails 4.1.8)
[1] pry(main)> Date.yesterday
=> Thu, 09 Apr 2015
[2] pry(main)> Date.today
=> Sat, 11 Apr 2015
[3] pry(main)> Date.tomorrow
=> Sat, 11 Apr 2015
[4] pry(main)>

使用Ruby 2.1和Rails 4.1.8

对我而言,似乎Date.yesterday和Date.tomorrow是基于Date.current计算的(并且没有时区,它被假定为UTC)。 Date.today的计算方式不同,当前的时区图片也是如此。

这是否意味着我不应该使用任何时间,没有明确时区的日期。这不是完全错的吗?

任何帮助将不胜感激

至少,我发现这是我们团队成员的有趣发现

2 个答案:

答案 0 :(得分:1)

如上所述hereDate.today使用系统的本地时间。

在单元测试中,您应该模拟时间,但是您应该在集成测试中标准化UTC。您可以使用Time.now.utc.to_date来执行此操作。 ActiveSupport也可以帮助你。

答案 1 :(得分:1)

所以我玩了一点,显然不难找到......

现在,在我需要'Date'类后,我在irb而不是rails控制台上做了同样的事情。事情只有Date.today存在,而其他不是默认的,这意味着Rails必须包含它以满足我们的需求。

我读了一下他们如何扩展Date类,我以为我在github / rails上创建了一个问题,但后来我偶然发现了这个 - :https://github.com/rails/rails/issues/12414

总结一下,Date.today应该用Date.current替换,所以这给出了

[1] pry(main)> Date.today
=> Sat, 11 Apr 2015
[2] pry(main)> Date.current
=> Fri, 10 Apr 2015

只有Date.today不包含时区,Rails的其他功能是......不一致是出乎意料的,并不好。