Tengo dos objetos Ruby on Rails DateTime. ¿Cómo encontrar el número de meses entre ellos? (Teniendo en cuenta que pueden pertenecer a diferentes años)
ruby-on-rails
ruby
date
ruby-on-rails-3.1
ave fénix
fuente
fuente

Respuestas:
más información en http://www.ruby-forum.com/topic/72120
fuente
(12 * (date2.year - date1.year) + date2.month - date1.month).abs if date1 && date2Una respuesta más precisa consideraría días en la distancia.
Por ejemplo, si considera que la distancia del mes desde
28/4/2000y1/5/2000es en0lugar de1, puede usar:fuente
Dale una oportunidad a
fuente
irb>Time.at("2014-10-01".to_time - "2014-12-01".to_time).month => 10(Renuncio al formateo ... no puedo entenderlo)Date.new(2014, 10, 31), Date.new(1997, 4, 30), recibí 213 en lugar de 210 meses. La razón de esto es que1.month.secondses la cantidad de segundos en 30 días y no el promedio de segundos en un mes. Votar en contra para que otros se mantengan libres de errores.Puede reformular la pregunta como "cuántos primeros días hay entre el comienzo de los meses de las fechas" y luego usar transformaciones de datos de estilo funcional:
fuente
Suponiendo que ambos son fechas:
((date2 - date1).to_f / 365 * 12).roundsimple.fuente
((date2 - date1).to_f / 60 / 60 / 24 / 365 * 12).roundfuente
Otra solución que encontré (construida a partir de una solución publicada aquí) es si desea que el resultado incluya fracciones de mes. Por ejemplo, la distancia es
1.2 months.fuente
fuente
Necesitaba el número exacto de meses (incluidos los decimales) entre dos fechas y escribí el siguiente método para ello.
Si comparamos, digamos el 26 de septiembre con el 26 de septiembre (el mismo día), lo calculo como 1 día. Si no lo necesita, puede eliminar la primera línea del método:
period_end = period_end + 1.dayPasa las siguientes especificaciones:
fuente
Aquí hay una variante de fuerza bruta:
date2debe ser siempre mayor quedate1fuente
Aquí hay otro método. Esto ayudará a calcular el número de meses enteros entre dos fechas.
fuente