Rails对于在 MySql 中自动插入格式正确的日期时间非常好,无需我过多考虑。
然而,为了进行验证,我需要检查存储在mysql中的datetime值(即2008-07-02 18:00:00)是大于还是小于“现在”。我可以调用DateTime.now
或Time.now
,但如何将其转换为mysql所支持的格式呢?
谢谢
Rails对于在 MySql 中自动插入格式正确的日期时间非常好,无需我过多考虑。
然而,为了进行验证,我需要检查存储在mysql中的datetime值(即2008-07-02 18:00:00)是大于还是小于“现在”。我可以调用DateTime.now
或Time.now
,但如何将其转换为mysql所支持的格式呢?
谢谢
您可以使用to_s(:db)
将其转换为数据库友好格式。
Time.now.to_s(:db)
但是,如果您在Rails中指定了时区,则需要小心,因为时间将以UTC格式存储在数据库中。您需要指定时区以进行正确的比较。
Time.now.utc.to_s(:db)
你还可以在MySQL中使用NOW()
函数来代替在Ruby中生成当前时间。Widget
,这将找到在过去的一天内创建的所有小部件:Thing.find(:all, :condition => ["created_at > ?", Time.now - 1.day])
Thing.where('created_at > ?', 6.months.ago)
。 - Sandro L6.months.ago
和原始建议中的Time.now - 1.day
也不同,因为它们使用不同的参考时间。Time.now
使用系统时间,这可能不是.ago
比较的时间,这取决于应用程序配置、TZ环境变量等。 - undefined
ActiveRecord::Base.sanitize(time)
来获得所需的格式。(当然需要 ActiveRecord,因此大多适用于 Rails) - yuval