首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby日期减法(例如90天前)

Ruby日期减法(例如90天前)
EN

Stack Overflow用户
提问于 2011-03-03 01:25:58
回答 6查看 102.1K关注 0票数 91

我有点被joda-time API宠坏了:

代码语言:javascript
复制
DateTime now = new DateTime();
DateTime ninetyDaysAgo = now.minusDays(90);

我也在尝试用Ruby做类似的事情,但是我

代码语言:javascript
复制
now = Time.now
ninetyDaysAgo = now - (90*24)

然而,这里的数学是错误的(我实际上是在午夜处理日期)。

有没有友好的API来做日期减法?

EN

回答 6

Stack Overflow用户

发布于 2013-05-14 17:13:37

对于使用Rails的用户,请查看以下内容:

代码语言:javascript
复制
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
票数 16
EN

Stack Overflow用户

发布于 2011-03-03 02:07:51

如果你使用的是Rails或者不介意包含ActiveSupport,你可以这样使用Numeric#days DSL:

代码语言:javascript
复制
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实例。当从date实例中添加/减去数字时,这些数字隐式地是天数。

代码语言:javascript
复制
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)> 
票数 10
EN

Stack Overflow用户

发布于 2015-03-21 23:42:30

Ruby在Date and DateTime classes中支持日期算法,这是Ruby标准库的一部分。这两个类都公开了#+#-方法,它们可以从日期或时间中添加和减去日期。

代码语言:javascript
复制
$ 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会使效果更加明显。

代码语言:javascript
复制
 > (Date.new(2015, 5, 31) << 3).to_s  # May 31 - 3 months; 92 days diff
 => "2015-02-28" 

按照您的joda-time示例,您可以用Ruby编写类似下面这样的代码。

代码语言:javascript
复制
now =  DateTime.now
ninety_days_ago = now - 90

或者仅仅是

代码语言:javascript
复制
ninety_days_ago = DateTime.now - 90
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5171102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档