with rails now ruby-on-rails ruby ruby-on-rails-3 datetime

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