我已经查看了很多这样的问题,但似乎没有一个与我的问题相对应,即:
我有一个包含事件的 Rails 应用程序。事件是具有开始日期(日期字段)、开始时间(时间)和结束时间(时间)属性的模型。当我创建它们时,我没有将任何输入的日期转换为基于 UTC 的时间(所有时间都是本地时间)。
我想知道活动是否结束了。我在我的模型中添加了一些方法来解决这个问题,但是因为我正在比较 Apples(非 UTC)和 Oranges(UTC)时间。我正在撞到一堵砖墙。
因为我混合了日期和时间,所以我在我的事件模型中添加了以下方法:
帮手
def date_start_time
return DateTime.new(self.date.year, self.date.month, self.date.day, self.start_time.hour, self.start_time.min, self.start_time.sec)
end
def date_end_time
return DateTime.new(self.date.year, self.date.month, self.date.day, self.end_time.hour, self.end_time.min, self.end_time.sec)
end
in_past 方法
def in_past
logger.debug 'comparing end time: ' + self.date_end_time.to_s + ' to the current time: ' + DateTime.now.to_s
self.date_end_time <= DateTime.now
end
我在 Rails 控制台中加载了一个应该在几分钟后结束的事件,但我对 in_past 是真的:
1.9.3-p194 :020 > event.in_past
comparing end time: 2013-08-19T20:38:00+00:00 to the current time: 2013-08-19T20:37:22-05:00
=> true
我尝试将 .zone 添加到我的 DateTime.now 中,但这看起来更糟。我觉得我在这里尝试了所有区域选项的组合,实际上我更愿意忽略时区,因为所有事件当前都是本地的。
想法?建议?