Supposons que j'ai une norme Post.first.created_at
datetime. Puis-je comparer cela directement avec un datetime au format 2009-06-03 16:57:45.608000 -04:00
en faisant quelque chose comme:
Post.first.created_at > Time.parse("2009-06-03 16:57:45.608000 -04:00")
Edit: Les deux champs sont datetimes, pas les dates.
Oui, vous pouvez utiliser des opérateurs de comparaison pour comparer des dates, par exemple:
irb(main):018:0> yesterday = Date.new(2009,6,13)
=> #<Date: 4909991/2,0,2299161>
irb(main):019:0> Date.today > yesterday
=> true
Mais essayez-vous de comparer une date à une date/heure?
Si c'est le cas, vous voudrez convertir le datetime en une date puis faire la comparaison.
J'espère que ça aide.
Oui, vous pouvez comparer directement la valeur d'un created_at
Champ de date/heure ActiveRecord avec un objet DateTime
normal (comme celui que vous pouvez obtenir en analysant la chaîne que vous avez).
Dans un projet, j'ai un objet Value qui a un objet datetime created_at:
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
Le champ created_at est défini comme:
create_table "values", :force => true do |t|
[...]
t.datetime "created_at"
end
N.B. si votre champ est une date et non une date/heure, vous devez le convertir en une heure:
Post.first.created_at.to_time > Time.parse("2009-06-03 16:57:45.608000 -04:00")
ou analyser une date:
Post.first.created_at > Date.parse("2009-06-03 16:57:45.608000 -04:00")
sinon vous obtiendrez un:
ArgumentError: comparison of Date with Time failed