【问题标题】:Comparing dates in rails比较 Rails 中的日期
【发布时间】:2009-06-14 08:20:34
【问题描述】:

假设我有一个标准的Post.first.created_at 日期时间。我可以通过执行以下操作直接将其与2009-06-03 16:57:45.608000 -04:00 格式的日期时间进行比较:

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

编辑:这两个字段都是日期时间不是日期

【问题讨论】:

    标签: ruby-on-rails datetime date-math


    【解决方案1】:

    是的,您可以使用比较运算符来比较日期,例如:

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

    但是您是否尝试将日期与日期时间进行比较?

    如果是这种情况,您需要将日期时间转换为日期,然后进行比较。

    我希望这会有所帮助。

    【讨论】:

    • 请注意:将 rails 自己的 datetime 对象与其他对象进行比较会产生非常意想不到的结果。值得注意的是......见下文:p.created_at # Fri, 28 Aug 2015 21:45:14 UTC +00:00p.updated_at # Fri, 28 Aug 2015 21:45:14 UTC +00:00 p.created_at == p.updated_at # false所以你必须这样做......p.created_at.to_i == p.updated_at.to_i # true更多信息在这里:stackoverflow.com/questions/19599792/…
    【解决方案2】:

    是的,您可以直接将created_at ActiveRecord 日期/时间字段的值与常规DateTime 对象(就像您可以通过解析字符串获得的对象一样)进行比较。

    在一个项目中,我有一个 Value 对象,它有一个 created_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
    

    created_at 字段定义为:

      create_table "values", :force => true do |t|
        [...]
        t.datetime "created_at"
      end
    

    注意如果您的字段是日期而不是日期时间,则需要将其转换为时间:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      • 2012-11-17
      • 1970-01-01
      相关资源
      最近更新 更多