Rails时间比较

时间:2013-11-06 11:58:18

标签: ruby-on-rails ruby datetime ruby-on-rails-4

我需要比较两个日期: 一个日期从表created_at列获取,另一个日期取自(我不知道,服务器时间或客户端时间)。

那么可以这样比较它们吗?

t.strftime("%Y-%d-%m") == Time.now.strftime("%Y-%d-%m")

其中t是表row.create_at。

现在,我的t将与我的计算机或服务器中的Time.now进行比较的时间是什么时候?

如果从我的电脑中取出,我该如何使用服务器时间?

2 个答案:

答案 0 :(得分:3)

由于Rails知道您的时间信息在数据库中存储为UTC,因此只要您将其提供给UTC,它就会转换。

我认为我们应该使用

t.strftime("%Y-%d-%m") == Time.zone.now.strftime("%Y-%d-%m")

的地方
t.strftime("%Y-%d-%m") == Time.now.strftime("%Y-%d-%m")

请确保永远不要手工构建查询字符串,并始终使用Time.zone.now作为基础,您应该是安全的。

有关详情,请浏览working with time zones

答案 1 :(得分:2)

此比较将按预期工作,因为您将时间转换为字符串然后比较字符串。我通常会转换为整数进行比较,但由于您要比较日期,因此需要先将时间对象转换为日期对象。

Ruby在服务器上执行,因此Time.now始终是服务器时间。如果您想与utc时间进行比较,请使用Time.current