我已经被joda-time API宠坏了:
DateTime now = new DateTime(); DateTime ninetyDaysAgo = now.minusDays(90);
我正在Ruby中尝试做类似的事情,但我
now = Time.now ninetyDaysAgo = now - (90*24)
然而,这里的数学是关闭的(我真的在午夜工作的日期)。是否有友好的日期减法API?
mbzjlibv1#
require 'date' now = Date.today ninety_days_ago = (now - 90)
通过IRB控制台运行此命令,我得到:
>>require 'date' now = Date.today ninety_days_ago = (now - 90) require 'date' => false now = Date.today => #<Date: 2011-03-02 (4911245/2,0,2299161)> ninety_days_ago = (now - 90) => #<Date: 2010-12-02 (4911065/2,0,2299161)>
如果你需要时间,你可以说now = DateTime.now
now = DateTime.now
m2xkgtsf2#
对于那些使用Rails的人,请查看以下内容:
DateTime.now - 10.days => Sat, 04 May 2013 12:12:07 +0300 20.days.ago - 10.days => Sun, 14 Apr 2013 09:12:13 UTC +00:00
uoifb46i3#
如果你使用Rails或者不介意包含ActiveSupport,你可以像这样使用数字#days DSL:
ruby-1.9.2-p136 :002 > Date.today => Wed, 02 Mar 2011 ruby-1.9.2-p136 :003 > Date.today - 90.days => Thu, 02 Dec 2010
由于您使用的是日期而不是时间,因此您还应该从Date示例开始,或者使用#to_date转换DateTime示例。当从日期示例中添加/减去数字时,数字隐含地是天。
ruby-1.9.2-p136 :016 > DateTime.now.to_date => #<Date: 2011-03-02 (4911245/2,0,2299161)> ruby-1.9.2-p136 :017 > DateTime.now.to_date - 90 => #<Date: 2010-12-02 (4911065/2,0,2299161)>
scyqe7ek4#
Ruby在Date and DateTime classes中支持日期运算,这是Ruby标准库的一部分。这两个类都公开了#+和#-方法,它们可以从日期或时间中加减天数。
$ irb > require 'date' => true > (DateTime.new(2015,4,1) - 90).to_s # Apr 1, 2015 - 90 days => "2015-01-01T00:00:00+00:00" > (DateTime.new(2015,4,1) - 1).to_s # Apr 1, 2015 - 1 day => "2015-03-31T00:00:00+00:00"
使用#〈〈和#〉〉方法对月进行运算,而不是对日进行运算,对月的运算与对日的运算略有不同,使用Date代替DateTime效果更明显。
> (Date.new(2015, 5, 31) << 3).to_s # May 31 - 3 months; 92 days diff => "2015-02-28"
按照您的joda-time示例,您可以用Ruby编写类似于以下内容的代码。
now = DateTime.now ninety_days_ago = now - 90
或者干脆
ninety_days_ago = DateTime.now - 90
41zrol4v5#
使用秒数:
Time.now - 90*24*60*60
v7pvogib6#
这是一个超级老的帖子,但是如果你想保持使用Time对象,就像最初被问到的那样,而不是切换到Date对象,你可能会考虑使用Ruby Facets。Ruby Facets是一个标准化的Ruby核心类扩展库。http://rubyworks.github.io/facets/通过要求“方面”,然后可以对时间对象执行以下操作。Time.now.less(90, :days)
Time
Date
Ruby Facets
Time.now.less(90, :days)
qkf9rpyu7#
宝石安装慢性
require 'chronic' $wdate = Chronic.parse '7 days ago'
iyr7buue8#
使用Rails Active Support的简单解决方案:
days90_ago = 90.days.ago.to_date.to_s OUTPUT: puts 90_days_ago => "2019-10-09" # considering cur_date: 2020-01-07
8条答案
按热度按时间mbzjlibv1#
通过IRB控制台运行此命令,我得到:
如果你需要时间,你可以说
now = DateTime.now
m2xkgtsf2#
对于那些使用Rails的人,请查看以下内容:
uoifb46i3#
如果你使用Rails或者不介意包含ActiveSupport,你可以像这样使用数字#days DSL:
由于您使用的是日期而不是时间,因此您还应该从Date示例开始,或者使用#to_date转换DateTime示例。当从日期示例中添加/减去数字时,数字隐含地是天。
scyqe7ek4#
Ruby在Date and DateTime classes中支持日期运算,这是Ruby标准库的一部分。这两个类都公开了#+和#-方法,它们可以从日期或时间中加减天数。
使用#〈〈和#〉〉方法对月进行运算,而不是对日进行运算,对月的运算与对日的运算略有不同,使用Date代替DateTime效果更明显。
按照您的joda-time示例,您可以用Ruby编写类似于以下内容的代码。
或者干脆
41zrol4v5#
使用秒数:
v7pvogib6#
这是一个超级老的帖子,但是如果你想保持使用
Time
对象,就像最初被问到的那样,而不是切换到Date
对象,你可能会考虑使用Ruby Facets
。Ruby Facets是一个标准化的Ruby核心类扩展库。
http://rubyworks.github.io/facets/
通过要求“方面”,然后可以对时间对象执行以下操作。
Time.now.less(90, :days)
qkf9rpyu7#
宝石安装慢性
iyr7buue8#
使用Rails Active Support的简单解决方案: