【发布时间】:2013-09-08 00:07:04
【问题描述】:
有属性when和duration的任务模型。
create_table "tasks", force: true do |t|
...
t.datetime "when"
t.integer "duration"
...
end
我编写了检查任务是否处于活动状态的方法,以便我可以在页面上显示它。 这是主动方法:
def active?
if (self.when + self.duration) > Time.now
true
end
end
我尝试在控制台中检查对象:
t.when + t.duration
=> Sun, 08 Sep 2013 01:01:00 UTC +00:00
DateTime.now
=> Sun, 08 Sep 2013 01:57:13 +0200
t.active?
=> true
它是true,但我为duration 输入了 1:00 时间和 1 分钟,我希望它不应该是真的。
似乎数据库中的when 列没有保存在正确的时区,所以它给出了不正确的结果。如何解决这个问题?
【问题讨论】:
-
您是如何在
duration中存储“1 分钟”的? -
我展示了与这些字段相关的迁移,它以整数形式存储,因此为 60。
-
当您将
60添加到DateTime时会发生什么?只需在控制台中快速输入DateTime.now + 60,然后查看+ 60对时间戳的作用。 -
[7] pry(main)> DateTime.now => Sun, 08 Sep 2013 19:52:51 +0200 [8] pry(main)> DateTime.now + 60 => Thu, 07 Nov 2013 19:52:59 +0200但这与我的问题无关。看一下:[9] pry(main)> Task.last.when => Sun, 08 Sep 2013 16:58:00 UTC +00:00 [10] pry(main)> Task.last.when + Task.last.duration => Sun, 08 Sep 2013 16:59:00 UTC +00:00因为when列是TimeWithZone,看一下:[11] pry(main)> Task.last.when.class => ActiveSupport::TimeWithZone
标签: ruby-on-rails ruby timezone