1

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

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

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

t表 row.create_at在哪里。

现在,我t将与之比较的时间,Time.now 是从我的计算机还是从服务器获取的?

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

4

2 回答 2

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 作为基础,您应该是安全的。

有关更多信息,请通过使用时区

于 2013-11-06T12:15:08.007 回答
2

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

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

于 2013-11-06T12:03:39.540 回答