Comparaison des dates dans les rails
supposons que j'ai une norme Post.first.created_at
datetime. Puis-je comparer cela directement avec une datetime dans le 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,dates.
2 réponses
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 êtes-vous essayer de comparer une date datetime?
si c'est le cas, vous voulez convertir la datetime en date, puis faites la comparaison.
j'espère que cette aide.
Oui, vous pouvez comparer directement la valeur d'un created_at
champ Date/heure ActiveRecord avec un DateTime
object (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 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
Le champ created_at est défini comme suit:
create_table "values", :force => true do |t|
[...]
t.datetime "created_at"
end
N.B. si votre champ est une date et non une datetime, alors 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 un 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