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