【问题标题】:How rails compare with datetime with timestampRails 如何与带有时间戳的日期时间进行比较
【发布时间】:2019-08-05 04:04:04
【问题描述】:

我有这样的代码

  if user.created_at >= 1563724800
    do sth
  end

which user.created_at 肯定是 > 1563724800。但它仍然返回 false。我必须使用user.created_at.to_i >= 1563724800 来获得我所期望的。所以我想知道它是如何工作的。

【问题讨论】:

    标签: ruby-on-rails datetime


    【解决方案1】:

    据我了解,您应该这样做(将整数与 DateTime 进行比较,也将其转换为整数)-

      if user.created_at.to_i >= 1563724800
        do sth
      end
    

    或者你应该反向比较(将整数转换为日期时间)

      if user.created_at >= Time.at(1563724800)
        do sth
      end
    

    time.to_i => int 时间为自纪元以来的整数秒数。

    Time.at(seconds) => time => 具有给定秒数的新时间对象

    【讨论】:

    • 是的,我知道我现在必须将其转换为整数。但我想知道当我直接比较它们时它会做什么。为什么它返回 false
    • @ThanksSirAlex 这是因为created_atTime 的一个实例,而1563724800Integer 的一个实例,如果这两个对象不可比较并且在ruby 中,则返回nil nil 也被视为 false。希望这是有道理的。更多详情可以关注ruby-doc.org/core-2.6.3/Time.html#method-i-3C-3D-3E
    • 我不这么认为。当我尝试使用user.created_at <=> 1563724800 比较它们时,它返回-1 而不是nil,所以不知何故 ruby​​ 认为它小于 int 值,但并不是它们无法比较。所以这是不可理解的。所以 ruby​​ 在比较它们时必须做某事。
    • @ThanksSirAlex 嗯,到目前为止,这是一个有点高级的话题,简而言之,我试图解释它,因为 ruby​​ 中的每个类都包含基于比较运算符工作的 Comparable 模块,即 > 或>= 或 返回值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 2019-05-23
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 2021-03-31
    • 2017-05-04
    相关资源
    最近更新 更多