2010-10-04 8 views
6

No puedo encontrar una forma (usando definiciones de clase) para obtener hace meses. Los segundos, los días y los minutos están bien porque siempre son constantes. Sin embargo, dado que los meses no siempre son constantes, necesito saber una forma de que Ruby sepa cuántos días hay en el mes actual.Hace meses en ruby ​​

+0

Tenga en cuenta que el número de segundos en un día no es constante (horario de verano) –

+1

También hay segundos interminables si queremos ser realmente pedantes, que pueden ser reemplazados por horas bisiestos. Ninguno de los cuales debe confundirse con las ranas saltarinas. http://en.wikipedia.org/wiki/Leap_second –

Respuesta

0

¿Esto es lo que estás buscando? DaysIn(MonthNum)

+0

Creo que * lo que está buscando (por cómo dice "Meses atrás") es más parecido a la función 'month_between' de Oracles, que devolverá el número de meses (como decimal) entre dos valores de fecha. Tiene en cuenta las diferentes duraciones de los meses. http://www.techonthenet.com/oracle/functions/months_between.php – FrustratedWithFormsDesigner

1

Si lo que necesita saber cuántos días había entre dos fechas, dicen hoy y el mismo número de días del último mes se puede hacer esto:

(Date.today - Date.today.prev_month).to_i 

Esto le daría el número de días en el mes anterior. Si desea conocer el número de días del mes en curso en su lugar puede hacer:

(Date.today.next_month - Date.today).to_i 
+0

Esto está mal. El primer caso falla cuando hoy es 31 de marzo, por ejemplo. Esto devolverá 31, sin embargo, en febrero (que es el mes anterior a marzo) nunca puede ser más de 29 días.

irb(main):013:0> today = Date.parse '2011-03-31' => # irb(main):014:0> (today - today.prev_month).to_i => 31
DNNX

+0

Muy cierto, no me di cuenta de que Fecha # prev_month devolvería el último día del mes anterior por cada día con un número mayor que el último día del mes anterior (por ejemplo, 31 de marzo, 30 , 29 y 28 #prev_month regresa el 28 de febrero. – Theo

8

Si la aplicación utiliza ActiveSupport (por ejemplo, una aplicación Rails), puede utilizar

3.months.ago 

para obtener el fecha actual menos 3 meses.

+7

Sin ActiveSupport puede usar Date.today << 3. – steenslag

+1

¡El operador del cambio es increíble! Gracias por señalarlo. – phatmann