首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Time对象获取下个月/上个月

问从Time对象获取下个月/上个月
EN

Stack Overflow用户
提问于 2010-04-23 23:40:00
回答 13查看 49.7K关注 0票数 37

我有一个时间对象,想要找到下个月/上个月。添加减去天数不起作用,因为每月的天数不同。

代码语言:javascript
复制
time = Time.parse('21-12-2008 10:51 UTC')
next_month = time + 31 * 24 * 60 * 60

递增月份也会下降,因为必须处理滚动

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

我发现唯一有效的方法是

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

有没有更优雅的方式来做这件事,而我却看不到?你会怎么做?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2010-04-23 23:51:01

在Time上没有内置的方法来做你想做的事情。我建议您在模块中编写方法来完成这项工作,并扩展Time类,使其在其余代码中的使用更加简单。

您可以使用DateTime,但是这些方法(<<和>>)的命名方式不会使以前没有使用过它们的人能够清楚地看到它们的用途。

票数 10
EN

Stack Overflow用户

发布于 2010-04-23 23:43:03

Ruby on Rails

注意:这个只能在Rails中工作(谢谢Steve!)但我把它留在这里,以防其他人正在使用Rails,并希望使用这些更直观的方法。

非常简单--谢谢Ruby on Rails!

代码语言:javascript
复制
Time.now + 1.month

Time.now - 1.month  

或者,如果它与current time (仅限Rails 3+ )相关,则为另一种选择。

代码语言:javascript
复制
1.month.from_now

1.month.ago
票数 86
EN

Stack Overflow用户

发布于 2013-11-25 06:23:35

就我个人而言,我更喜欢使用:

代码语言:javascript
复制
Time.now.beginning_of_month - 1.day      # previous month
Time.now.end_of_month + 1.day            # next month

它总是有效的,并且独立于一个月的天数。

查找更多信息in this API doc

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2699902

复制
相关文章

相似问题

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