rails now ruby time

ruby - rails - ¿Cómo agrego dos semanas a Time.now?



strftime ruby (8)

¿Cómo puedo agregar dos semanas al Time.now actual en Ruby? Tengo un pequeño proyecto de Sinatra que usa DataMapper y antes de guardar, tengo un campo poblado con la hora actual MÁS de dos semanas, pero no funciona según las necesidades. ¡Cualquier ayuda es muy apreciada! Obtuve el siguiente error:

NoMethodError at / undefined method `weeks'' for 2:Fixnum

Aquí está el código para el Modelo:

class Job include DataMapper::Resource property :id, Serial property :position, String property :location, String property :email, String property :phone, String property :description, Text property :expires_on, Date property :status, Boolean property :created_on, DateTime property :updated_at, DateTime before :save do t = Time.now self.expires_on = t + 2.week self.status = ''0'' end end


Puedes usar estos 3 patrones

# you have NoMethod Error undefined method require ''active_support/all'' # Tue, 28 Nov 2017 11:46:37 +0900 Time.now + 2.weeks # Tue, 28 Nov 2017 11:46:37 +0900 Time.now + 2.week # Tue Nov 28 11:48:24 +0900 2017 2.weeks.from_now


Creo que week/weeks se define en la extensión numérica de soporte activo

$ ruby -e ''p Time.now'' 2011-05-05 22:27:04 -0400 $ ruby -r active_support/core_ext/numeric -e ''p Time.now + 2.weeks'' 2011-05-19 22:27:07 -0400


Debe usar segundos para hacer cálculos entre fechas, pero puede usar la clase de Tiempo como ayudante para obtener los segundos de los elementos de la parte de fecha.

Time.now + 2.week.to_i

EDITAR: Tal como lo menciona @iain, necesitarás soporte activo para lograr 2.ignificar.a_i, si no puedes (o no quieres) tener esta dependencia, siempre puedes usar el operador + para agregar segundos a un Time instancia ( time + numeric → time docs aquí )

Time.now + (60 * 60 * 24 * 7 * 2)


La clase Ruby Date tiene methods para agregar días y meses además de segundos en Time. Un ejemplo:

require ''date'' t = DateTime.now puts t # => 2011-05-06T11:42:26+03:00 # Add 14 days puts t + 14 # => 2011-05-20T11:42:26+03:00 # Add 2 months puts t >> 2 # => 2011-07-06T11:42:26+03:00 # And if needed, make Time object out of it (t + 14).to_time # => 2011-05-20 11:42:26 +0300


Me gusta el mío también :)

def minor?(dob) n = DateTime.now a = DateTime.parse(dob) a >> 12*18 > n end

Le ahorra la molestia de pensar en años bisiestos y segundos. Solo funciona fuera de la caja.


No tienes tan buenos ayudantes en Ruby. Puedes agregar segundos

Time.now + (2*7*24*60*60)

Pero, afortunadamente, hay muchas bibliotecas de ayudantes de fecha (o crea las tuyas propias);)


<%current_time=Time.now current_time_s=current_time.strftime(''%Y-%m-%d %H:%M:%S'').to_s #show currrent date time current_time= Time.now + (60 * 60 * 24 * 7 * 250) current_time_e=current_time.strftime(''%Y-%m-%d %H:%M:%S'').to_s #show datetime after week %>


require ''rubygems'' require ''active_support/core_ext/numeric/time'' self.expires = 2.weeks.from_now