2014-09-19 78 views
0

我想比较两个DateTime对象。但是,我不太了解结果。在Rails比较日期时间对象

DateTime.parse("2014-09-14 01:12:03 +0200") 
>> Sun, 14 Sep 2014 01:12:03 +0200 

Foo.order("created_at").last.created_at.to_datetime 
>> Sun, 14 Sep 2014 01:12:03 +0200 

Foo.order("created_at").last.created_at.to_datetime === DateTime.parse("2014-09-14 01:12:03 +0200") 
true 

Foo.order("created_at").last.created_at.to_datetime > DateTime.parse("2014-09-14 01:12:03 +0200") 
true 

为什么>比较不false的结果呢? (Rails 4.0.9)

编辑:我得到它的工作使用===运营商。但是当我使用>运算符时它仍然返回true

+0

看起来你可能会得到一些提示这里(http://stackoverflow.com/questions/992431/comparing [中轨比较日期] -dates-in-rails) – 2014-09-19 16:36:02

+0

每个对象的类是什么? – 2014-09-19 16:40:26

+0

@MaxWilliams它既是一个DateTime对象。请看我更新的问题。 – Albert 2014-09-19 16:48:35

回答

1

运算符===在Ruby中的Date类中定义,它是DateTime的父类。运算符===如果它们在您的示例中是同一天,则返回true。请参阅description

现在要回答有关比较两个DateTime的问题的其他部分,请参阅此answer。其中规定在数据库中保存和重新加载datetime的行为会截断DateTime的seconds_fraction部分。

您可以验证您的轨道控制台通过下面的代码 -

obj1 = Foo.order("created_at").last.created_at.to_datetime 
obj2 = DateTime.parse("2014-09-14 01:12:03 +0200") 

obj1.sec > obj2.seC#comparing seconds, returns false. Both equal 
obj1.sec_fraction > obj2.sec_fraction #should return true. Not equal.