2015-08-21 2 views
1

J'obtiens des résultats différents lorsque j'ajoute des mois à un DateTime par incréments différents. Est-ce un bug?Rails Ajout de mois DateTime non cohérent

> 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 

Alors, (((start_date + 3.months) + 3.months) + 3.months)! = start_date + 9.months?

Solution (basé sur la réponse acceptée ci-dessous): l'utilisation de d3.end_of_month me donne l'attendu 31 December au lieu de 30 December.

Répondre

3

Ce n'est pas un bug, mais plutôt un résultat de juin ayant 30 jours. Lorsque vous ajoutez les 3 premiers mois, cela vous amène à la fin du mois de juin, le 30. Les ajouts subséquents continueront à se terminer le 30. Lorsque vous ajoutez 9 mois, vous sautez directement à Décembre, un mois qui a 31 jours. Si vous commencez en Juin, vous verrez des résultats cohérents, à moins que vous finissez en Février ...

+0

Merci. J'ai une boucle dans mon application qui augmente de trois mois à la fois, et s'attend à aller à la fin de chaque 3 mois pour la condition de sortie de travailler - y at-il un moyen (non manuel) pour y parvenir? – Anand

+1

@Anand Combinez ce que vous avez avec http://stackoverflow.com/q/14120661/525478 –