在 Ruby 中,万圣节:
Date.today - 6.months + 6.months != Date.today
我们需要更新Ruby的日期实现吗?其他语言是否也有同样的问题?
在 Ruby 中,万圣节:
Date.today - 6.months + 6.months != Date.today
我们需要更新Ruby的日期实现吗?其他语言是否也有同样的问题?
Date.today - 1.month
,似乎Rails会发现2011年9月31日不是一个有效的日期,因此它会将其向后推迟一天使其成为一个有效的日期。然而,当您从9月底向前推进一个月时,它将保持在2011年10月30日,因为那是一个有效的日期。基本上,Rails只是试图增加(或减少)月份字段,只要它是一个有效的日期,它就不会调整日期字段。Date
对象的.end_of_month
(或 .beginning_of_month
)方法,以确保始终获得月份的末尾或开头。不,这是可以预料的,而且这并不仅限于Ruby-例如在SQL中尝试。
(今天 - 6个月)
是4月份的最后一天(30日)-因为没有31日。我们只考虑月份,而不是精确的天数。
将4月30日加上6个月,你会得到10月30日。
你知道,这与10月31日不同。
> 6.months == 180.days
=> true
但是当你使用月份进行日期计算时,它们被认为是日历月份,而不是30天的时间段。看一下这个例子:
> Date.today - 180.days + 180.days
=> Mon, 31 Oct 2011