我如何在Time.now上添加两周?

如何在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 

你在普通的Ruby中没有这样好的助手。 你可以添加秒:

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

但是,幸运的是,有很多date助手库(或build立你自己的))

Ruby Date类除了Time之外还有方法来添加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 

您必须使用秒来计算date之间的时间,但您可以使用Time类作为助手来获取date部分元素的秒数。

 Time.now + 2.week.to_i 

编辑:正如@iain所提到的,如果你不能(或者不想)拥有这个依赖关系,你将需要主动支持来实现对2.week.to_i ,你总是可以使用+操作符来添加秒实例( 时间+数字→时间文档在这里 )

 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