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 && date2
Una respuesta más precisa consideraría días en la distancia.
Por ejemplo, si considera que la distancia del mes desde
28/4/2000
y1/5/2000
es en0
lugar 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.seconds
es 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).round
simple.fuente
((date2 - date1).to_f / 60 / 60 / 24 / 365 * 12).round
fuente
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.day
Pasa las siguientes especificaciones:
fuente
Aquí hay una variante de fuerza bruta:
date2
debe ser siempre mayor quedate1
fuente
Aquí hay otro método. Esto ayudará a calcular el número de meses enteros entre dos fechas.
fuente