【问题标题】:Ruby: comparing dates of two Time objectsRuby:比较两个时间对象的日期
【发布时间】:2013-09-21 13:04:56
【问题描述】:

在 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)

我尝试使用适用于DateTime 对象的.to_date,但Time 不支持它。

【问题讨论】:

  • 在比较两个 Time 对象时,<>== 有什么问题?只需if time_1 == time_2 ...
  • time_1 == time_2 #=> false time_1 < time_2 #=> true
  • 我只想比较日期。我将编辑问题以使其清楚。

标签: ruby date datetime time


【解决方案1】:

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

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

工作完成。

【讨论】:

  • 嗨,我在 createdAt 中有一个值为“2016-06-13T08:59:58+00:00”的列,我想运行一个查询,通过 createdAt 从前面查找对象结束我发送“2016-06-13”。如何按日期查找对象,不包括时间?提前致谢
【解决方案2】:

我已验证这对我有用:

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

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

【讨论】:

    【解决方案3】:

    也许只是这样测试:

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

    它会比字符串比较消耗更少的资源。

    monkey 用这个方法修补 Time 类,我会很高兴阅读

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

    【讨论】:

      【解决方案4】:

      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)
      

      【讨论】:

      • 我收到以下错误:NoMethodError: undefined method to_date' for 2012-12-10 10:10:00 +0100:Time`
      猜你喜欢
      • 2019-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多