【发布时间】: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 来获得我所期望的。所以我想知道它是如何工作的。
【问题讨论】:
我有这样的代码
if user.created_at >= 1563724800
do sth
end
which user.created_at 肯定是 > 1563724800。但它仍然返回 false。我必须使用user.created_at.to_i >= 1563724800 来获得我所期望的。所以我想知道它是如何工作的。
【问题讨论】:
据我了解,您应该这样做(将整数与 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 => 具有给定秒数的新时间对象
【讨论】:
created_at 是Time 的一个实例,而1563724800 是Integer 的一个实例,如果这两个对象不可比较并且在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 在比较它们时必须做某事。