我有一个时间对象,想找到下个月/上个月.由于每个月的天数不同,加减天数不起作用.

time = Time.parse('21-12-2008 10:51 UTC')
next_month = time + 31 * 24 * 60 * 60

增加月数也会下降,因为你必须注意滚动

time = Time.parse('21-12-2008 10:51 UTC')
next_month = Time.utc(time.year, time.month+1)

time = Time.parse('01-12-2008 10:51 UTC')
previous_month = Time.utc(time.year, time.month-1)

我唯一能找到工作的就是

time = Time.parse('21-12-2008 10:51 UTC')
d = Date.new(time.year, time.month, time.day)
d >>= 1
next_month = Time.utc(d.year, d.month, d.day, time.hour, time.min, time.sec, time.usec)

有没有比这更优雅的方式,我没有看到?

推荐答案

Time上没有内置的方法可以在Ruby中实现你想要的功能.我建议您在一个模块中编写方法来完成这项工作,并扩展Time类,使它们在代码的其余部分中的使用变得简单.

你可以使用DateTime,但是这些方法(<<>>)的命名方式并不能让以前没有使用过它们的人明白它们的用途.

Ruby相关问答推荐

是什么导致游戏对象中的命名错误?

Ruby类构造函数使用`()`而不是`. new()`

为什么 rdoc 注释似乎以两个井号/井号符号开头?

Ruby 中的 Float#floor 和 Float#to_i 有什么区别?

配置 SubLime Linter 插件以使用 Ruby 1.9 语法

`Range#include?` 和 `Range#cover?` 有什么区别?

构造Ruby的现代方法是什么?

这些 Ruby 命名空间约定之间有什么区别?

Integer(value) 和 value.to_i 之间的区别

Ruby访问嵌套函数中的外部变量

在 RSpec-2.11 中使用隐含的 `subject` 和 `expect`

在 ruby​​ 中访问嵌套哈希的元素

可可豆荚安装在iOS项目上不起​​作用

Jekyll - 找不到命令

在 Ruby 中定义 [方括号] 方法是如何工作的?

不区分大小写的数组#include?

Ruby on rails - 静态方法

向实例对象添加方法

Ruby 中的自然语言处理

相当于 Ruby 的 cURL?