ruby-on-rails - now - rails datetime with timezone
Ruby encontrar el próximo jueves(o cualquier día de la semana) (5)
Aparte de recibir el próximo jueves como los otros descritos, Ruby proporciona métodos fáciles para obtener el mes y el año de cualquier fecha:
month = date.month
year = date.year
Dentro de Rails puedes obtener fácilmente el próximo jueves como tal:
next_thur = Date.today.next_week.advance(:days=>3)
Esta pregunta ya tiene una respuesta aquí:
¿Cuál es la mejor manera de calcular la fecha, el mes y el año del próximo jueves (o cualquier día) a partir de hoy en Ruby?
ACTUALIZACIÓN Para crear objetos ficticios, estoy tratando de averiguar cómo calcular un tiempo aleatorio. En total, me gustaría producir un tiempo aleatorio entre las 5 y las 10 pm el próximo jueves de la semana.
Esta respuesta SO también es breve y simple https://.com/a/7930553/3766839
def date_of_next(day)
date = Date.parse(day)
delta = date > Date.today ? 0 : 7
date + delta
end
date_of_next "Thursday"
OMI, la biblioteca chronic es increíble para cosas como esta.
El código de Ruby sería:
def date_of_next(day)
Chronic.parse(''next #{day}'')
end
DateTime.now.next_week.next_day(3)
Como señaló @Nils Riedemann:
Tenga en cuenta que no recibirá el próximo jueves, sino el jueves de la próxima semana. p.ej. Si mañana fuera jueves, no volverá mañana, sino los jueves de la próxima semana.
Aquí hay un extracto de un código que he escrito recientemente que maneja el caso que falta.
require ''date''
module DateTimeMixin
def next_week
self + (7 - self.wday)
end
def next_wday (n)
n > self.wday ? self + (n - self.wday) : self.next_week.next_day(n)
end
end
# Example
ruby-1.9.3-p194 :001 > x = DateTime.now.extend(DateTimeMixin)
=> #<DateTime: 2012-10-19T15:46:57-05:00 ... >
ruby-1.9.3-p194 :002 > x.next_week
=> #<DateTime: 2012-10-21T15:46:57-05:00 ... >
ruby-1.9.3-p194 :003 > x.next_wday(4)
=> #<DateTime: 2012-10-25T15:46:57-05:00 ... >
date = Date.today
date += 1 + ((3-date.wday) % 7)
# date is now next Thursday