有人能帮助我理解这个吗? 当我尝试使用以下代码时,我得到一个非常奇怪的行为(反向逻辑)。
c = {
id: 5,
years_of_experience: 4,
github_points: 293,
languages: ['C', 'Ruby', 'Python', 'Clojure'],
date_applied: 5.days.ago.to_date,
age: 26
}
c["date_applied"] > 15.days.ago.to_date) - #works
c["date_applied"] < 15.days.ago.to_date) - #doesnt work
“date_applied person applied”是存储在哈希
中的值后者更符合逻辑,但第一个返回正确的答案。
旁注:我确实要求'active_support / all'。
由于
答案 0 :(得分:1)
irb ## ruby-1.9.3-p448
#
要求'active_support / time'
c = {
id: 5,
years_of_experience: 4,
github_points: 293,
languages: ['C', 'Ruby', 'Python', 'Clojure'],
date_applied: 5.days.ago.to_date,
age: 26
}
(c[:date_applied] > 15.days.ago.to_date) - #true
(c[:date_applied] < 15.days.ago.to_date) - #false
class Fixnum
def days
self * 60 * 60 * 24 # we store seconds in a day
end
def ago
Time.now - self
end
end
答案 1 :(得分:0)
我想我理解这个问题。
您正在阅读
c["date_applied"] > 15.days.ago`
为:
日期是否超过15天?
和
`c["date_applied"] < 15.days.ago`
为:
申请日期是否少于15天?
它会给你你想要的答案的反面,对吗?
如果是这种情况,您应该花点时间了解时间比较的运作方式。当您输入date1 > date2
时,实际上是在说,
如果我在数字线上绘制date1
和date2
,时间从左到右增加,
date1
的右侧是date2
?
这与您键入2 > 1
时相同。这意味着,
如果我在数字线上绘制1
和2
,数字从左到右增加,
是2
右侧的1
鉴于这是时间比较的运作方式,让我们重新审视您的代码。
require 'active_support/all'
c = { date_applied: 5.days.ago }
c[:date_applied] > 15.days.ago
正确解释,这说
5天前的日期是否在从左到右的时间轴上比15天前的日期更向右?
答案是肯定的,或true
。
另一方面,如果您错误将其解释为
是5天前超过15天前的吗?
你会得到(或期望得到)错误的答案,或false
。
询问相当于英文问题的正确方法
约会x
是否超过y
天前?
是(可能违反直觉的)x.to_date < y.days.ago.to_date
构造,应该正确地理解为
日期x
早于y
天前的日期?
如果我理解你的问题,这应该解释它。