Array últimos 6 meses

Hola a todos,
en una aplicación necesito trabajar con rangos de fecha, por ejemplo:

dates = (Date.today-15 … Date.today).map(&:to_s)

Obtengo un array con con las fechas de los últimos 15 días.

Ahora necesito hacer lo mismo con obteniendo los últimos 6 meses (8, 9,
10, 11, 12, 1, 2), ¿alguien sabe como hacerlo de forma elegante? He
probado varias formas y no hay manera.

2008/2/24 Mario S. [email protected]:

Hola a todos,
en una aplicación necesito trabajar con rangos de fecha, por ejemplo:

dates = (Date.today-15 … Date.today).map(&:to_s)

Obtengo un array con con las fechas de los últimos 15 días.

Ahora necesito hacer lo mismo con obteniendo los últimos 6 meses (8, 9,
10, 11, 12, 1, 2), ¿alguien sabe como hacerlo de forma elegante? He
probado varias formas y no hay manera.

Si te refieres a cada una de las fechas en esos últimos seis meses:

dates = (6.months.ago.to_date…Date.today).map(&:to_s)

De hecho el tuyo lo puedes cambiar por:

dates = (15.days.ago.to_date…Date.today).map(&:to_s)

Espero que te sirva.
Suerte.

2008/2/24 Mario S. [email protected]:

Hola a todos,
en una aplicación necesito trabajar con rangos de fecha, por ejemplo:

dates = (Date.today-15 … Date.today).map(&:to_s)

Obtengo un array con con las fechas de los últimos 15 días.

Ahora necesito hacer lo mismo con obteniendo los últimos 6 meses (8, 9,
10, 11, 12, 1, 2), ¿alguien sabe como hacerlo de forma elegante? He
probado varias formas y no hay manera.

dates = (6.months.ago.to_date…Date.today).collect(&:month).uniq

con eso obtienes dates = [8, 9, 10, 11, 12, 1, 2]

Saludos

Muchas gracias a todos !!!

2008/2/25 Borja Martín [email protected]:

Lo único es que deberás tener en cuenta es que el método ‘months’ lo que
hace es multiplicar por 30 el número sobre el que está siendo llamado,
así que no tiene en cuenta los meses con 31 días y por lo no tanto no
contabiliza los meses completos. Creo que una opción sería hacer lo que
propone Daniel, pero llamando al método year. Para obtener la fecha de
hace seis meses sería algo así: (0.5).year.ago.to_date

Saludos

Lo de que el método months solo consideraba 30 días era cierto antes.
Al menos en la 2.0.2 (supongo que introducido en la 2.0, pero no lo
se), los métodos como months, years y similares funcionan “realmente”,
no como simples multiplicadores. Ahora mismo no estoy delante de un
ordenador con Rails instalado, pero podéis ver
http://dev.rubyonrails.org/browser/tags/rel_2-0-2/activesupport/lib/active_support/core_ext/numeric/time.rb
donde se ve como se utiliza la clase Duration
http://dev.rubyonrails.org/browser/tags/rel_2-0-2/activesupport/lib/active_support/duration.rb
para realizar ahora esos cálculos.

Tienes razón, acabo de comprobarlo con una aplicación en rails 2.0.2 y
funciona tal como comentas.
Gracias por la
aclaración.
Saludos

Daniel R.
Troitiño escribió:> 2008/2/25 Borja Martín [email protected]:


Ror-es mailing list
[email protected]
simplelogica.net


/**

Lo único es que deberás tener en cuenta es que el método ‘months’ lo que
hace es multiplicar por 30 el número sobre el que está siendo llamado,
así que no tiene en cuenta los meses con 31 días y por lo no tanto no
contabiliza los meses completos. Creo que una opción sería hacer lo que
propone Daniel, pero llamando al método year. Para obtener la fecha de
hace seis meses sería algo así: (0.5).year.ago.to_date

Saludos

Daniel R.
Troitiño escribió:> 2008/2/24 Mario S. [email protected]: