如何在Time.now中添加两周?

时间:2011-05-06 01:17:47

标签: ruby time

如何在Ruby中添加两周到当前的Time.now?我有一个使用DataMapper的小型Sinatra项目,在保存之前,我有一个填充了当前时间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

8 个答案:

答案 0 :(得分:64)

你在普通的Ruby中没有这么好的帮手。您可以添加秒:

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

但是,幸运的是,有许多日期助手库(或构建自己的;))

答案 1 :(得分:52)

Ruby Date类有methods除了时间秒之外还要添加日期和月份。 一个例子:

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

答案 2 :(得分:21)

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

答案 3 :(得分:20)

您必须使用秒来在日期之间进行计算,但您可以使用Time类作为帮助来获取日期部分元素的秒数。

Time.now + 2.week.to_i
编辑:如@iain所述,您需要有效支持才能完成2.week.to_i,如果您不能(或不想)拥有此依赖关系,您可以随时使用+运算符将秒添加到Time实例(time + numeric → time docs here

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

答案 4 :(得分:19)

我认为week/weeksactive support numeric扩展名

中定义了$ 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
{{1}}

答案 5 :(得分:2)

<%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
%>

答案 6 :(得分:2)

您可以使用这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

答案 7 :(得分:0)

我也喜欢我的。)

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

让您省去思考闰年和秒的麻烦。只需开箱即用。