rails DateTime月增加不一致

时间:2015-08-21 06:00:29

标签: ruby-on-rails datetime date-arithmetic

当我以不同的增量向DateTime添加月份时,我得到不同的结果。这是一个错误吗?

> start_date = DateTime.strptime("03/31/2001", "%m/%d/%Y")
#=> Sat, 31 Mar 2001 00:00:00 +0000
> start_date + 3.months
#=> Sat, 30 Jun 2001 
> d1 = start_date + 3.months
#=> Sat, 30 Jun 2001 
> d2 = d1 + 3.months
#=> Sun, 30 Sep 2001 
> d3 = d2 + 3.months
#=> Sun, 30 Dec 2001 
> start_date + 9.months
#=> Mon, 31 Dec 2001

所以,(((start_date + 3.months) + 3.months) + 3.months)!= start_date + 9.months

解决方案(基于下面接受的答案):使用d3.end_of_month为我提供了预期的31 December而不是30 December

1 个答案:

答案 0 :(得分:3)

这不是一个错误,而是六月有30天的结果。当你添加前3个月时,它将带你到6月底,30日。随后的补充将继续在30日结束。当你增加9个月时,你会直接跳到12月,这个月有31天。如果你从六月开始,你会看到一致的结果,除非你碰巧在二月份结束......