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