6

在 Ruby 中比较两个 Time 对象的日期的最佳方法是什么?

我有两个对象,例如:

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

4 回答 4

9

只需要 stdlib 的“日期”部分,然后比较日期:

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

任务完成。

于 2013-09-17T09:42:07.410 回答
3

也许只是这样测试:

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
于 2013-09-17T09:20:26.923 回答
3

我已经验证这对我有用:

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

%F格式仅返回日期部分。

于 2013-09-17T08:16:56.647 回答
1

to_date 在 ruby​​ 2.0 和 ruby​​ 1.9.3 和 ruby​​ 1.9.2 http://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)>

但它不在 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)
于 2013-09-17T07:43:06.827 回答