Mam dwa obiekty DateTime Ruby on Rails. Jak znaleźć liczbę miesięcy między nimi? (Pamiętając, że mogą należeć do różnych lat)
ruby-on-rails
ruby
date
ruby-on-rails-3.1
phoenixwizard
źródło
źródło
Odpowiedzi:
więcej informacji na http://www.ruby-forum.com/topic/72120
źródło
(12 * (date2.year - date1.year) + date2.month - date1.month).abs if date1 && date2
Dokładniejsza odpowiedź uwzględniłaby dni w oddali.
Na przykład, jeśli uważasz, że odległość miesięczna od
28/4/2000
i1/5/2000
wynosi0
raczej niż1
, możesz użyć:źródło
Spróbuj
źródło
irb>Time.at("2014-10-01".to_time - "2014-12-01".to_time).month => 10
(Rezygnuję z formatowania ... nie mogę tego rozgryźć)Date.new(2014, 10, 31), Date.new(1997, 4, 30)
otrzymałem 213 zamiast 210 miesięcy. Powodem tego jest1.month.seconds
liczba sekund w 30 dni, a nie średnia sekund w miesiącu. Głosowanie w dół, aby inni pozostali wolni od błędów.Możesz przeformułować pytanie jako „ile pierwszych dni upływa między początkami miesięcy dat”, a następnie użyć transformacji danych w stylu funkcjonalnym:
źródło
Zakładając, że obie daty są
((date2 - date1).to_f / 365 * 12).round
proste.źródło
((date2 - date1).to_f / 60 / 60 / 24 / 365 * 12).round
źródło
Inne rozwiązanie, które znalazłem (zbudowane na podstawie rozwiązania zamieszczonego już tutaj) jest przeznaczone, jeśli chcesz, aby wynik obejmował ułamki miesiąca. Na przykład odległość to
1.2 months
.źródło
źródło
Potrzebowałem dokładnej liczby miesięcy (w tym liczb dziesiętnych) między dwiema datami i napisałem dla niej następującą metodę.
Porównując powiedzmy 26 września do 26 września (tego samego dnia), obliczam to jako 1 dzień. Jeśli tego nie potrzebujesz, możesz usunąć pierwszą linię w metodzie:
period_end = period_end + 1.day
Spełnia następujące specyfikacje:
źródło
Oto wariant brutalnego wymuszania:
date2
musi być zawsze większe niżdate1
źródło
Oto inna metoda. Pomoże to obliczyć liczbę pełnych miesięcy między dwiema datami
źródło
Rozwiązanie w każdym przypadku
źródło