J'ai deux objets Ruby on Rails DateTime. Comment trouver le nombre de mois entre eux? (En gardant à l'esprit qu'ils peuvent appartenir à des années différentes)
ruby-on-rails
ruby
date
ruby-on-rails-3.1
phoenixwizard
la source
la source
Réponses:
plus d'informations sur http://www.ruby-forum.com/topic/72120
la source
(12 * (date2.year - date1.year) + date2.month - date1.month).abs if date1 && date2
Une réponse plus précise prendrait en compte les jours au loin.
Par exemple, si vous considérez que la distance mensuelle de
28/4/2000
et1/5/2000
est0
plutôt que1
, vous pouvez utiliser:la source
Essayez de
la source
irb>Time.at("2014-10-01".to_time - "2014-12-01".to_time).month => 10
(J'abandonne le formatage ... je ne peux pas le comprendre)Date.new(2014, 10, 31), Date.new(1997, 4, 30)
j'ai reçu 213 mois au lieu de 210. La raison en est que1.month.seconds
c'est le nombre de secondes dans 30 jours et non la moyenne des secondes dans un mois. Downvoter pour que les autres restent sans bug.Vous pouvez reformuler la question comme "combien de premiers jours y a-t-il entre le début des mois des dates", puis utiliser des transformations de données de style fonctionnel:
la source
En supposant que les deux sont des dates:
((date2 - date1).to_f / 365 * 12).round
simple.la source
((date2 - date1).to_f / 60 / 60 / 24 / 365 * 12).round
la source
Une autre solution que j'ai trouvée (basée sur une solution déjà publiée ici) est si vous souhaitez que le résultat inclue des fractions de mois. Par exemple, la distance est
1.2 months
.la source
la source
J'avais besoin du nombre exact de mois (y compris les décimales) entre deux dates et j'ai écrit la méthode suivante pour cela.
Si vous comparez, disons du 26 septembre au 26 septembre (même jour), je le calcule comme 1 jour. Si vous n'en avez pas besoin, vous pouvez supprimer la première ligne de la méthode:
period_end = period_end + 1.day
Il passe les spécifications suivantes:
la source
Voici une variante de forçage brutal:
date2
doit être toujours supérieur àdate1
la source
Voici une autre méthode. Cela aidera à calculer le nombre de mois entiers entre deux dates
la source