Saya memiliki dua objek DateTime Ruby on Rails. Bagaimana menemukan jumlah bulan di antara mereka? (Ingatlah bahwa mereka mungkin berasal dari tahun yang berbeda)
ruby-on-rails
ruby
date
ruby-on-rails-3.1
phoenixwizard
sumber
sumber
Jawaban:
info lebih lanjut di http://www.ruby-forum.com/topic/72120
sumber
(12 * (date2.year - date1.year) + date2.month - date1.month).abs if date1 && date2
Jawaban yang lebih akurat akan mempertimbangkan hari-hari di kejauhan.
Misalnya, jika Anda menganggap bahwa bulan-jarak dari
28/4/2000
dan1/5/2000
adalah0
bukan1
, maka Anda dapat menggunakan:sumber
Cobalah
sumber
irb>Time.at("2014-10-01".to_time - "2014-12-01".to_time).month => 10
(Saya menyerah pada pemformatan ... tidak bisa mengetahuinya)Date.new(2014, 10, 31), Date.new(1997, 4, 30)
saya menerima 213, bukan 210 bulan. Alasannya1.month.seconds
adalah karena jumlah detik dalam 30 hari dan bukan rata-rata detik dalam sebulan. Merendahkan suara sehingga orang lain tetap bebas bug.Anda dapat mengubah pertanyaan menjadi "berapa hari pertama ada di antara permulaan bulan dari tanggal", dan kemudian gunakan transformasi data gaya fungsional:
sumber
Dengan asumsi keduanya adalah tanggal:
((date2 - date1).to_f / 365 * 12).round
sederhana.sumber
((date2 - date1).to_f / 60 / 60 / 24 / 365 * 12).round
sumber
Solusi lain yang saya temukan (membangun solusi yang sudah diposting di sini) adalah jika Anda ingin hasilnya menyertakan pecahan bulan. Misalnya jaraknya
1.2 months
.sumber
sumber
Saya membutuhkan jumlah bulan yang tepat (termasuk desimal) antara dua tanggal dan menulis metode berikut untuk itu.
Jika membandingkan katakanlah 26 September hingga 26 September (hari yang sama) saya menghitungnya sebagai 1 hari. Jika Anda tidak membutuhkannya, Anda dapat menghapus baris pertama dalam metode ini:
period_end = period_end + 1.day
Ini melewati spesifikasi berikut:
sumber
Berikut varian pemaksaan kasar:
date2
harus selalu lebih besar daridate1
sumber
Ini metode lain. Ini akan membantu menghitung jumlah bulan penuh antara dua tanggal
sumber
Solusi untuk semua kasus
sumber