这可能会引入微妙的“错误”(感知不一致),如下所示:
>> Time.zone.parse('Tue, 01 Aug 2017 00:00:00 CEST +02:00') < Date.new(2017,8,1)
=> true
似乎Rails将Date转换为具有'00:00:00 UTC'的DateTime或TimeWithZone对象,因此结果。像这样:
>> Date.new(2017,8,1).to_datetime
=> Tue, 01 Aug 2017 00:00:00 +0000
这可以解释它。但我想知道Rails实际上是如何做到的,以及它在过程中将它转换为什么类型的对象,当然。我没有在API文档或源代码中找到它,但也许有人可以一步一步解释。
我查看的来源是:compare_with_coercion
PS:对我来说,在这种类型的比较中,Rails实际上会将TimeWithZone对象转换为Date对象,从而导致只比较日期部分,这样看起来似乎更为理智,因此:>> Time.zone.parse('Tue, 01 Aug 2017 00:00:00 CEST +02:00') == Date.new(2017,8,1)
=> true
价: