2010-05-10 73 views
4

上个月有没有内置功能,和今天一样?示例:如何在ruby中获取上个月的今天的日子?

2010/05/02 -> 2010/04/02 
2010/05/15 -> 2010/04/15 
2010/05/31 -> 2010/04/30 

谢谢!

+3

什么是标准的'2010/04/30'是 “相同的” 为'2010/05/31'? :) – deceze 2010-05-10 03:29:22

+0

如果上个月没有与当前月份一样大的日期,请使用_that_月的最大日期数字。也应考虑闰年,即大多数2月份的最后一天是28日,而有些则是29日。 thx – ohho 2010-05-10 04:08:53

回答

11

您可以用<<减去整个月份。

>> d = Date.parse('2010-05-31') 
=> #<Date: 4910695/2,0,2299161> 
>> d.to_s 
=> "2010-05-31" 
>> (d<<1).to_s 
=> "2010-04-30" 

More info

+0

太棒了!根本没有注意到有一个“<<”。 – ohho 2010-05-10 04:49:05

+1

直到几周前我也没有。正如我确信你可以从'Date'的文档中看出来,如果你正朝另一个方向发展,那么也有'>>'。 – theIV 2010-05-10 04:56:56

0

Ruby's date class允许您从特定日期加减日。

1

你可以例如设置定时对象

old_time = Time.now 

然后创建基于

new_time = Time.local(old_time.year, (old_time.month - 1), old_time.day, old_time.hour, old_time.min, old_time.sec) 

但是一个新的时间对象,deceze指出,什么是5/31的标准成为4/30? 在irb中,4/31'溢出'至5/01。

3

您可以尝试使用

Time.parse('2010/05/31').months_since(-1)

3

你可以这样做:

(Date.today - 1.month).strftime("%Y/%m/%d") 
+0

我不知道上面提到的'<<'运算符,但老实说' - 1.month'更具可读性。 – jwadsack 2014-02-28 17:26:35

相关问题