我需要比较两个日期:
一个日期从表created_at
列获取,另一个日期取自(我不知道,服务器时间或客户端时间)。
那么可以这样比较它们吗?
t.strftime("%Y-%d-%m") == Time.now.strftime("%Y-%d-%m")
其中t
是表row.create_at。
现在,我的t
将与我的计算机或服务器中的Time.now进行比较的时间是什么时候?
如果从我的电脑中取出,我该如何使用服务器时间?
答案 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