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.

30
demandé sur Kick Buttowski 2009-06-14 12:20:34

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.

41
répondu bernie 2009-06-14 09:02:39

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
10
répondu LucaM 2009-06-14 09:43:23