2011-02-07 40 views
22

Me preguntaba cómo puedo crear una estructura del estilo del último mes de días "21 de enero", etc. automáticamente en ruby ​​(en rails3)?Rango de fechas en una matriz, ruby ​​

Si hoy es el 6 de febrero de entonces el arrary tendría [ "Jan 6", "7 ene" ... "Feb 6"]

+0

No entiendo la pregunta. ¿La respuesta depende de la fecha actual? Alguna otra entrada? ¿Cómo se vería la salida? Tal vez deberías proporcionar algunos ejemplos de entrada y salida, y pensar si alguien que no sabe nada acerca de tu problema entendería la pregunta. – DigitalRoss

+0

Disculpa la vaguedad. actualizó la pregunta :) – Elliot

Respuesta

70

No sé si he entendido por completo la pregunta, pero aquí está una respuesta que podría ayudar

(1.month.ago.to_date..Date.today).map{ |date| date.strftime("%b %d") } 

salidas

["Jan 07", "Jan 08", "Jan 09", "Jan 10", "Jan 11", "Jan 12", "Jan 13", "Jan 14", "Jan 15", "Jan 16", "Jan 17", "Jan 18", "Jan 19", "Jan 20", "Jan 21", "Jan 22", "Jan 23", "Jan 24", "Jan 25", "Jan 26", "Jan 27", "Jan 28", "Jan 29", "Jan 30", "Jan 31", "Feb 01", "Feb 02", "Feb 03", "Feb 04", "Feb 05", "Feb 06"] 

Se puede crear un rango de fechas, y luego convertirlos al formato deseado usando strftime

Solo asegúrese de utilizar objetos Date en su rango en lugar de objetos Time, de lo contrario creará una matriz de cada segundo incluido en ese lapso.

+3

** NB: solo para enfatizar que necesita tener cuidado al operar en un rango de tiempo, así que asegúrese de convertir al formato de fecha como se ve arriba. Gracias. ** – edavey

+2

Debe asegurarse de incluir el soporte activo, 'require 'active_support/all'', si no está en rails3. – slm

+1

¿De dónde viene el "1"? ¿Dónde está el mes? ¿procedente de? son aquellos en apoyo activo? ¿Es lo de '1.month.ago' algo de Rails? – JDS

9
require 'date' 
now = Date.today 
p (now<<1 .. now).map{ |day| day.strftime("%b %e").squeeze(' ') } 
# No railsy .month.ago.to_date silliness! 
# the squeeze gets rid of the occasional extra space 

Salida:

["Jan 7", "Jan 8", "Jan 9", "Jan 10", (...), "Feb 7"] 
+0

¿Qué hace el << hacer con respecto a DateTime? Parece que "retrocede un mes", pero esa sintaxis es muy opaca y no puedo encontrar documentación para ella con la clase DateTime – JDS

+0

DateTime hereda de Date (Date aparece como parent en los documentos). El [<< método] (http://www.ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/Date.html#method-i-3C-3C) está documentado allí. Retrocede un mes de hecho. – steenslag

+0

Gracias. Tuve problemas para buscar en Google "<<" – JDS

Cuestiones relacionadas