doc说:
介于?(min,max)public
之间如果当前对象的时间在指定的min内,则返回true 和最长时间。
在Ruby中:
>> DateTime.now.between?(DateTime.now, DateTime.now+1)
=> false
>> Date.today.between?(Date.today, Date.today+1)
=> true
通过在Rails中使用.current
,差异变得更加清晰,因为您特别假设此方法在DateTime
和Date
上具有相似的行为:
>> DateTime.current.between?(DateTime.current, DateTime.current+1)
=> false
>> Date.current.between?(Date.current, Date.current+1)
=> true
这是故意的行为吗?如果是这样,为什么?处理区间的min
边缘时的行为并不是特殊的,这似乎很奇怪。特别是在考虑max
部分是特殊的时候:
>> DateTime.now.between?(DateTime.now-1, DateTime.now)
=> true
>> Date.today.between?(Date.today-1, Date.today)
=> true
答案 0 :(得分:5)
让我们启动irb并运行这些代码:
"#{DateTime.now.inspect} \n #{DateTime.now.inspect}"
结果'将是这样的:
#<DateTime: 2017-03-22T11:42:28+03:00 ((2457835j,31348s,373353553n),+10800s,2299161j)>
#<DateTime: 2017-03-22T11:42:28+03:00 ((2457835j,31348s,373449152n),+10800s,2299161j)>
如您所见,存在差异,以纳秒为单位(373353553n <373449152n)
让我们假设差异等于&#39; x&#39;,而DateTime.now等于&#39;现在&#39;,然后:
1)DateTime.now.between?(DateTime.now,DateTime.now + 1.second)
Now.between?(Now + x,Now + x + x + 1.second)=&gt;假
2)DateTime.now.between?(DateTime.now-1,DateTime.now)
Now.between?(现在+ x-1.second,Now + x + x)=&gt;真
答案 1 :(得分:2)
那是因为时间流逝。 您检查的第一个DateTime.now,在第二个DateTime.now之前的几毫秒,在括号中。
答案 2 :(得分:2)
正如其他人所说:
a.between?(b,c)
a
在b
和c
之前几毫秒被解释。
获得理想结果的最短途径是:
(now=DateTime.now).between?(now, now+1)
#=> true
您还可以颠倒DateTime
对象初始化的顺序:
(DateTime.now..DateTime.now+1).cover? DateTime.now
#=> true
答案 3 :(得分:1)
好像它的问题几毫秒
DateTime.now.between?(DateTime.now, DateTime.now+1)
^ executing first ^ executing after few milliseconds or nanoseconds
DateTime
与您所比较的内容的值是否比 DateTime
value in
之间的值高?`
但是如果你把它保存在变量
中now = DateTime.now
now.between?(now,now+1)
#=> true
另外,正如@ndn评论
DateTime.now == DateTime.now
#=> false