2010-06-21 25 views
14

Tengo que hacer una simple diferencia entre dos fechas:¿Cómo evaluar una diferencia de fecha en años, meses y días (ruby)?

Date.parse("2009-06-20") - Date.today 

Esto me da la diferencia de las fechas en día.

Alguien sabe una forma de convertir fácilmente que con el siguiente formato:

The event occurred X years, Y months and Z days ago 

Gracias.

+0

typo? Y meses? – ghoppe

+0

posible duplicado de [Distance_of_time_in_words] más detallada (http://stackoverflow.com/questions/1224613/more-precise-distance-of-time-words) –

Respuesta

5

Tal vez está buscando para distance_of_times_in_words

+1

Buena respuesta, pero eso es específico de Ruby-on-Rails. El póster tendrá que extraer ese código en un programa de rubíes puros. (No mencionó a Rails, así que supongo que es una pregunta no relacionada con los raíles.) – ghoppe

+0

Malo, estoy usando ruby-on-rails – robertokl

+0

Eso está bien, pero necesito algo más preciso. ¿Sabes de otra manera? – robertokl

0

No sé de cualquier norma, forma correcta de hacer esto. Por extraño que parezca, la biblioteca estándar de Ruby tiene una clase Date pero no tiene funcionalidad DateSpan. Rails tiene una solución, pero para mí es un poco doloroso requerir todo este mamut para una tarea tan trivial.

1

Este es un ejemplo de la diferencia en días, horas y segundos. Agregue los campos que necesita.

def calculate_difference 
    minutes = (Date.parse("2009-06-20") - Date.today).to_i/60 
    days = minutes/(24*60) 
    minutes -= days * 24*60 
    hours = minutes/60 
    minutes -= hours * 60 
    "#{days}d#{hours}h#{minutes}m" 
end 
+0

no tan bonito =/ –

+0

sí .. Me gustaría calcular los meses y años también .. – robertokl

+1

El problema comienza exactamente con las polillas, porque hay un mes con 28, 30 y 31 días .. – robertokl

3

Hay una rubygem que devuelve la diferencia de tiempo en un hash como {: año = > 0,: mes => 0, ...}

El enlace es: https://rubygems.org/gems/time_diff

+1

Tu gema parece buena, pero creo que deberías trabajar en ello. Debe agregarle texto y formato. Sigan con el buen trabajo. – robertokl

+0

Gracias. Seguro que mejoraré mi joya. – abhidsm

Cuestiones relacionadas