2009-06-14 119 views
30

假設我有一個標準的Post.first.created_at datetime。我可以比較直接與日期時間格式2009-06-03 16:57:45.608000 -04:00做一樣的東西:在rails中比較日期

Post.first.created_at > Time.parse("2009-06-03 16:57:45.608000 -04:00") 

編輯:兩個字段都是日期時間沒有日期

回答

41

是的,你可以使用比較操作符來比較日期例如: -

irb(main):018:0> yesterday = Date.new(2009,6,13) 
=> #<Date: 4909991/2,0,2299161> 
irb(main):019:0> Date.today > yesterday 
=> true 

但是你想比較的日期爲日期時間?

如果是這樣,您需要將日期時間轉換爲日期,然後進行比較。

我希望這會有所幫助。

+3

只是說明:比較軌道自己的日期時間對象與他人可以給出非常意想不到的結果。值得注意的是......見下: 'p.created_at#Fri,28 Aug 2015 21:45:14 UTC +00:00' 'p.updated_at#Fri,28 Aug 2015 21:45:14 UTC +00:00 ' 'p.created_at == p.updated_at#false' 所以你必須這樣做......'p.created_at.to_i == p.updated_at.to_i#true' 更多的信息在這裏:http:// stackoverflow .COM /問題/ 19599792 /比較-相同,日期時間,對象 - - 紅寶石爲什麼 - 是 - 這些,二,日期時間,NOWS – bwest87 2015-08-28 22:15:06

9

是的,你可以用普通DateTime對象(如一個你可以得到解析你的字符串)直接比較一個created_at ActiveRecord的日期/時間字段的值。

在一個項目中,我有具有created_at DateTime對象值對象:

imac:trunk luca$ script/console 
Loading development environment (Rails 2.3.2) 
>> Value.first.created_at 
=> Fri, 12 Jun 2009 08:00:45 CEST 02:00 
>> Time.parse("2009-06-03 16:57:45.608000 -04:00") 
=> Wed Jun 03 22:57:45 0200 2009 
>> Value.first.created_at > Time.parse("2009-06-03 16:57:45.608000 -04:00") 
=> true 

的created_at字段被定義爲:

create_table "values", :force => true do |t| 
    [...] 
    t.datetime "created_at" 
    end 

N.B.如果你的領域是一個日期,而不是日期時間,那麼你需要將其轉換爲一個時間:

Post.first.created_at.to_time > Time.parse("2009-06-03 16:57:45.608000 -04:00") 

或分析日期:

Post.first.created_at > Date.parse("2009-06-03 16:57:45.608000 -04:00") 

,否則你會得到一個:

ArgumentError: comparison of Date with Time failed