Как добавить две недели в Time.now? - PullRequest
36 голосов
/ 06 мая 2011

Как я могу добавить две недели к текущему Time.now в Ruby?У меня есть небольшой проект Sinatra, в котором используется DataMapper, и перед сохранением у меня есть поле, заполненное текущим временем ПЛЮС две недели, но оно не работает должным образом.Любая помощь с благодарностью!Я получаю следующую ошибку:

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

Ответы [ 8 ]

65 голосов
/ 06 мая 2011

У вас нет таких хороших помощников на простом Руби.Вы можете добавить секунды:

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

Но, к счастью, существует множество библиотек помощников по датам (или создающих свою собственную;))

52 голосов
/ 06 мая 2011

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
21 голосов
/ 06 мая 2011
require 'rubygems'
require 'active_support/core_ext/numeric/time'
self.expires = 2.weeks.from_now
20 голосов
/ 07 июня 2011

Вы должны использовать секунды для вычисления между датами, но вы можете использовать класс Time в качестве помощника для получения секунд из элементов части даты.

Time.now + 2.week.to_i

РЕДАКТИРОВАТЬ: Как упоминалось @iainвам понадобится Active Support для достижения usign 2.week.to_i, если вы не можете (или не хотите) иметь эту зависимость, вы всегда можете использовать оператор +, чтобы добавить секунды к экземпляру Time () время + цифра → время документы здесь )

Time.now + (60 * 60 * 24 * 7 * 2)
19 голосов
/ 06 мая 2011

Я думаю, 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
2 голосов
/ 14 ноября 2017

Вы можете использовать эти 3 шаблона

# 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
2 голосов
/ 01 января 2016
<%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
%>
0 голосов
/ 12 ноября 2017

Мне тоже нравится мой:)

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

Избавляет вас от мыслей о високосных годах и секундах. Просто работает из коробки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...