Ruby: сравнение дат двух временных объектов

каков наилучший способ сравнить даты двух объектов времени в Ruby?

у меня есть два объекта, такие как:

time_1 = Time.new(2012,12,10,10,10)
time_2 = Time.new(2012,12,11,10,10)

в этом примере сравнение дат должно возвращать false.

в противном случае, та же дата, но в разное время, должна вернуть true:

time_1 = Time.new(2012,12,10,10,10)
time_2 = Time.new(2012,12,10,11,10)

Я пробовал использовать .to_date что работает DateTime объекты, но он не поддерживается Time.

4 ответов


просто требуется часть "дата" stdlib, затем сравните даты:

require "date"
time1.to_date == time2.to_date

работу.


Я проверил, что это работает для меня:

time_1.strftime("%F") == time_2.strftime("%F")

на %F format возвращает только часть даты.


может быть, просто тестирование таким образом:

time_1.year == time_2.year && time_1.yday == time_2.yday

это будет меньше ресурсов, чем сравнение строк.

обезьяна исправляет время класса с помощью этого метода, и мне будет приятно читать

class Time
  def date_compare(time)
    year == time.year && yday == time_2.yday
  end
end

time_1.date_compare time_2

to_date отлично работает в ruby 2.0 и ruby 1.9.3 и ruby 1.9.2http://ruby-doc.org/stdlib-1.9.2/libdoc/date/rdoc/Time.html

>> time_1.to_date
=> #<Date: 2012-12-10 ((2456272j,0s,0n),+0s,2299161j)>

но это не в stdlib ruby 1.8.7 http://ruby-doc.org/stdlib-1.8.7/libdoc/time/rdoc/Time.html - но тогда ваш способ создания объекта времени также не работает в этой версии:

> time_1 = Time.new(2012,12,10,10,10)
ArgumentError: wrong number of arguments (5 for 0)