Сравнение дат в рельсах - PullRequest
30 голосов
/ 14 июня 2009

Предположим, у меня есть стандартное Post.first.created_at datetime. Могу ли я сравнить это с датой и временем в формате 2009-06-03 16:57:45.608000 -04:00, выполнив что-то вроде:

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

Редактировать: Оба поля datetime , не даты .

Ответы [ 2 ]

42 голосов
/ 14 июня 2009

Да, вы можете использовать операторы сравнения для сравнения дат, например ::100100

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

Но вы пытаетесь сравнить дату с датой и временем?

Если это так, вам нужно преобразовать дату и время в дату, а затем выполнить сравнение.

Надеюсь, это поможет.

10 голосов
/ 14 июня 2009

Да, вы можете напрямую сравнивать значение поля даты / времени created_at ActiveRecord с обычным DateTime объектом (как тот, который вы можете получить, анализируя имеющуюся у вас строку).

В проекте у меня есть объект Value, в котором есть объект date_at create_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

Поле create_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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...