Ruby on Rails中,为何日期方法间出现奇怪行为,能否解释?

2026-04-11 20:172阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计449个文字,预计阅读时间需要2分钟。

Ruby on Rails中,为何日期方法间出现奇怪行为,能否解释?

打开一个Rails控制台并输入:

2.weeks.ago.between? 2.weeks.ago, 1.week.ago

它不会给你一个直接的答案,而是提示你多试几次。确实如此,多次尝试后,它会给出不同的答案。现在,我想,因为我们即将将2.weeks.ago与2.weeks.ago进行比较,评估两个不同的2.weeks.ago。

Ruby on Rails中,为何日期方法间出现奇怪行为,能否解释?

打开一个Rails控制台并输入:

2.weeks.ago.between? 2.weeks.ago, 1.week.ago

它给你的真假吗?不,真的,再试几次,它会给你不同的答案.

现在,我在想,因为我们将2.weeks.ago与2.weeks.ago进行比较,评估两个语句之间的时间是导致这种行为的.

我不能肯定地说,但我猜是介于两者之间?方法不包括在内,因此如果在两个语句之间经过几毫秒,上面的代码将评估为true,因为它将在两个日期之间进行比较.

但是,如果CPU设法足够快地处理这个,以便可以忽略经过的时间,那么它将评估为false.

任何人都可以对此有所了解吗?在一个可能很关键的系统中,这是一个最好的边缘情况,但是当我的测试通过并且看似随机失败时,它让我很头疼.

奇怪的是,这样做不会发生:

Date.yesterday.between? Date.yesterday, Date.tomorrow 原因无疑是由于时间函数的解决.有时,2.weeks.ago的两个实例同时解决,有时则不解决.当您使用昨天时,您看不到问题,因为它总是解析为零小时而不是相对于当前时间.

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

标签:奇怪行为

本文共计449个文字,预计阅读时间需要2分钟。

Ruby on Rails中,为何日期方法间出现奇怪行为,能否解释?

打开一个Rails控制台并输入:

2.weeks.ago.between? 2.weeks.ago, 1.week.ago

它不会给你一个直接的答案,而是提示你多试几次。确实如此,多次尝试后,它会给出不同的答案。现在,我想,因为我们即将将2.weeks.ago与2.weeks.ago进行比较,评估两个不同的2.weeks.ago。

Ruby on Rails中,为何日期方法间出现奇怪行为,能否解释?

打开一个Rails控制台并输入:

2.weeks.ago.between? 2.weeks.ago, 1.week.ago

它给你的真假吗?不,真的,再试几次,它会给你不同的答案.

现在,我在想,因为我们将2.weeks.ago与2.weeks.ago进行比较,评估两个语句之间的时间是导致这种行为的.

我不能肯定地说,但我猜是介于两者之间?方法不包括在内,因此如果在两个语句之间经过几毫秒,上面的代码将评估为true,因为它将在两个日期之间进行比较.

但是,如果CPU设法足够快地处理这个,以便可以忽略经过的时间,那么它将评估为false.

任何人都可以对此有所了解吗?在一个可能很关键的系统中,这是一个最好的边缘情况,但是当我的测试通过并且看似随机失败时,它让我很头疼.

奇怪的是,这样做不会发生:

Date.yesterday.between? Date.yesterday, Date.tomorrow 原因无疑是由于时间函数的解决.有时,2.weeks.ago的两个实例同时解决,有时则不解决.当您使用昨天时,您看不到问题,因为它总是解析为零小时而不是相对于当前时间.

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

标签:奇怪行为