Time.now.beginning_of_year不会在年初开始

时间:2013-01-04 21:07:10

标签: sql ruby-on-rails date activerecord

试图获取今年创建的记录,我偶然发现this great question。第二个答案说你从今天创建的模型中获得所有记录:

Model.where("created_at >= ?", Time.now.beginning_of_day)

所以,很自然地,我用Time.now.beginning_of_year尝试了同样的事情,它运作得很好。

但令我感到有趣的是,输出的查询(我在控制台中尝试过)是

SELECT COUNT(*) FROM `invoices` WHERE (created_at >= '2012-12-31 23:00:00')

我不知道2013年已经开始于2012-12-31 23:00:00?怎么样?

1 个答案:

答案 0 :(得分:3)

如果您尚未设置,则应在config/application.rb文件中设置时区。查找以config.time_zone开头的行。 (如果您不确定要给出的值,可以运行rake time:zones:all以获取所有可用时区的列表。)

设置好时区后,应使用Time.zone.now,而不是Time.now。这将适当地将您的时间“范围”到您的时区。

查看the API以获取有关TimeWithZone

的更多详情