如何在Rails中将当前时间加上10天

121

我尝试做了类似于以下的事情

Time.now + 5.days

但这并不起作用,尽管我依稀记得看到并深受印象的是能够像 2.years 这样做某事。

在Rails 3中我应该如何做到这一点?


应该可以运行。你遇到了什么错误? - cam
应该可以工作。由于您在Rails中,Time.zone.now听起来更合适。 - Ben
7个回答

309
使用
Time.now + 10.days

甚至可能更多。
10.days.from_now

两种方法都可以。您确定您正在使用的是Rails而不仅仅是Ruby吗?

如果您确定正在使用Rails,则您在哪里尝试运行它?请注意,必须加载Active Support。


@yuval 它适用于Rails而不是Ruby..我认为你已经明白了,但只是为了帮助其他人。 - Catmandu
1
这太棒了。我喜欢 Ruby 和 Rails。 - wpp
5
有一个细微的差别。Time.now + 10.days 总是选择您系统的时区,而如果在 Rails 配置中没有设置任何内容,则 10.days.from_now 会选择 UTC 时区。 - Babistalikesflyingonrails
通常情况下,最好使用Time.zone.now代替Time.now - x-yuri

24

days, years, 等等,是 Active Support 的一部分,所以这在 irb 中不起作用,但应该在 rails console 中起作用。


1
没错 - 无法在纯 Ruby 中完成这个。 - Yuval Karmi
2
在irb中也可以工作。如果你已经安装了gem,只需在会话开始或使用其命令之前执行require 'active_support/time'即可。 - darkdefender27

12

这个确实有效,我在需要向当前日期添加天数的任何地方都使用它:

Date.today + 5

12

其他一些选项,仅供参考

-10.days.ago
# Available in Rails 4
DateTime.now.days_ago(-10)

列出我所知道的所有选项:

[1] Time.now + 10.days
[2] 10.days.from_now
[3] -10.days.ago
[4] DateTime.now.days_ago(-10)
[5] Date.today + 10

那么,如果我们关心时区,它们之间有什么区别:

  • [1, 4] 使用系统时区
  • [2, 3] 使用你的Rails应用程序的配置时区
  • [5] 只包含日期,不包括时间

7

在Rails上尝试这个

Time.new + 10.days 

在Ruby上尝试这个

require 'date'
DateTime.now.next_day(10).to_time

4

在Ruby中试试这个。它将返回指定天数后的新日期/时间。

DateTime.now.days_since(10)

0

在以下两个表达式中有一点不同:

Time.now + 10.days

3.0.1 :003 > Date.today + 1.day => 星期三,2022年12月14日

甚至还可以是

10.days.from_now

3.0.1: 002 > 1.day.from_now => 2022年12月14日15:49:57.35305172 +0600


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接