2014-09-19 122 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.