Ruby:比较两个时间对象的日期

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对象。


2
比较两个时间对象时,使用 <>== 会出现什么问题?只需使用 if time_1 == time_2 ... 即可。 - Yevgeniy Anfilofyev
1
time_1 == time_2 #=> false time_1 < time_2 #=> true - Bala
我只想比较日期。我会编辑问题以使其清晰明了。 - Marco
4个回答

9

只需使用stdlib中的“date”部分,然后比较日期:

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

工作完成。

1
嗨,我有一个名为createdAt的列,其值为“2016-06-13T08:59:58+00:00”,我想运行一个查询来查找由createdAt创建的对象,并且从前端发送“2016-06-13”。如何按日期而不是时间查找对象?提前致谢。 - Mohd Anas

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

3

我已经验证了这对我有效:

time_1.strftime("%F") == time_2.strftime("%F")
< p > %F 格式返回仅日期部分。


1

我得到了以下错误: NoMethodError: undefined method to_date' for 2012-12-10 10:10:00 +0100:Time` - Marco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接