Ответ 1
У вас нет таких приятных помощников в простом Ruby. Вы можете добавить секунды:
Time.now + (2*7*24*60*60)
Но, к счастью, есть много вспомогательных библиотек событий (или создайте свои собственные;))
Как я могу добавить две недели к текущему Time.now в Ruby? У меня есть небольшой проект Sinatra, который использует DataMapper и перед сохранением, у меня есть поле, заполненное текущим временем PLUS две недели, но не работает по мере необходимости. Любая помощь очень ценится! Я получаю следующую ошибку:
NoMethodError at /
undefined method `weeks' for 2:Fixnum
Вот код для модели:
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
У вас нет таких приятных помощников в простом Ruby. Вы можете добавить секунды:
Time.now + (2*7*24*60*60)
Но, к счастью, есть много вспомогательных библиотек событий (или создайте свои собственные;))
В классе Ruby Date
есть методы, чтобы добавить дни и месяцы в дополнение к секундам во времени.
Пример:
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
Я думаю, что week/weeks
определяется в активной поддержке числового расширения
$ 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
Вы должны использовать секунды для расчета между датами, но вы можете использовать класс Time в качестве помощника для получения секунд из элементов детали даты.
Time.now + 2.week.to_i
EDIT: Как уже упоминалось @iain, вам понадобится Active Support для выполнения usign 2.week.to_i
, если вы не можете (или не хотите) иметь эту зависимость, вы всегда можете использовать оператор +
для добавления секунд к экземпляру Time
(время + числовые → данные о времени здесь)
Time.now + (60 * 60 * 24 * 7 * 2)
require 'rubygems'
require 'active_support/core_ext/numeric/time'
self.expires = 2.weeks.from_now
<%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
%>
Мне тоже нравится:)
def minor?(dob)
n = DateTime.now
a = DateTime.parse(dob)
a >> 12*18 > n
end
Экономит ваше внимание на високосные годы и секунды. Просто работает из коробки.
# 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