Откройте консоль Rails и введите это:
2.weeks.ago.between? 2.weeks.ago, 1.week.ago
Это дало вам истину или ложь? Нет, на самом деле, попробуйте еще несколько раз, и он даст вам разные ответы.
Теперь я думаю, что из-за того, что мы сравниваем 2.weeks.ago с 2.weeks.ago, время между оценкой двух операторов вызывает такое поведение.
Не могу точно сказать, но я предполагаю, что между? Метод не является включающим, и поэтому, если между двумя операторами прошло несколько миллисекунд, приведенный выше код будет иметь значение true, поскольку он будет находиться между двумя сравниваемыми датами.
Однако, если ЦПУ удается обработать это достаточно быстро, чтобы истекшее время игнорировалось, тогда оно оценивается как ложное.
Может кто-нибудь пролить свет на это? Это, в лучшем случае, крайний случай в системе, где это может быть критически важно, но это доставляло мне головную боль, когда мои тесты проходили и, по-видимому, не сработали.
Как ни странно, этого не происходит:
Date.yesterday.between? Date.yesterday, Date.tomorrow