Ruby on rails 使用between时的奇怪行为?日期的计算方法

Ruby on rails 使用between时的奇怪行为?日期的计算方法,ruby-on-rails,ruby,date,Ruby On Rails,Ruby,Date,打开Rails控制台并输入以下内容: 2.weeks.ago.between? 2.weeks.ago, 1.week.ago 它给你的是真是假?不,真的,再试几次,它会给你不同的答案 现在,我在想,因为我们比较了2周前和2周前,评估这两个陈述之间的时间导致了这种行为 我不能肯定,但我猜两者之间的关系?方法是不包含的,因此如果两个语句之间经过几毫秒,则上述代码将计算为true,因为它将位于比较的两个日期之间 但是,如果CPU能够足够快地处理这个问题,以至于所经过的时间是可忽略的,那么它的计算结

打开Rails控制台并输入以下内容:

2.weeks.ago.between? 2.weeks.ago, 1.week.ago
它给你的是真是假?不,真的,再试几次,它会给你不同的答案

现在,我在想,因为我们比较了2周前和2周前,评估这两个陈述之间的时间导致了这种行为

我不能肯定,但我猜两者之间的关系?方法是不包含的,因此如果两个语句之间经过几毫秒,则上述代码将计算为true,因为它将位于比较的两个日期之间

但是,如果CPU能够足够快地处理这个问题,以至于所经过的时间是可忽略的,那么它的计算结果将为false

有人能解释一下吗?这在一个可能很关键的系统中充其量只是一个边缘案例,但当我的测试随机通过和失败时,这让我很头疼

奇怪的是,在执行以下操作时不会发生这种情况:

 Date.yesterday.between? Date.yesterday, Date.tomorrow

其原因无疑是由于时间函数的分解。有时两周前的两个例子会在同一时间解决,有时则不会。当您使用“昨天”时,您看不到问题,因为它总是解析为零小时,而不是相对于当前时间


在像你这样的情况下,你可能只想比较日期,而不是日期和时间。

tvanfosson,打它的头

2.weeks.ago
给出了从执行到毫秒的整整两周时间。因此,对它进行两次评估可以提供两个不同的时间

执行以下操作将获得一致的结果:

two_weeks_ago = 2.weeks.ago two_weeks_ago.between? two_weeks_ago, 1.week.ago 两周前=2周前 两周前两周之间?两周前,一周前
我只是试了一下,每次都是假的。这个问题背后的意图是什么?我要求b/c在数据库级别进行类似的日期比较。

肯定是因为2.week.ago被调用了两次,由于处理时间的原因,每次都返回不同的响应。但这有关系吗。between函数完全按照预期工作。这种行为并不奇怪,因为如果您使用调试器进入代码,您会看到它完全按照应该的方式运行

试着做:

two_weeks_ago = 2.weeks.ago.to_date
two_weeks_ago.between? two_weeks_ago, 1.week.ago

嗯,我认为我的意图很明显被描述了——失败的测试用例。我在一个Windows框上遇到这个问题;也许这就是原因。是的,它是这样设计的。但我不知道这是平等还是比较。