我有以下模型和方法:
class UserPrice < ActiveRecord::Base
attr_accessible :price, :purchase_date,
def self.today
where(:purchase_date => Date.today)
end
def self.yesterday
where(:purchase_date => Date.yesterday)
end
为什么在表单上给我date_select字段
:purchase_date
1/4/2012(yesterday
方法),它也算作今天(today
方法),如果我给它1/5/2012(今天),它为零?P.S.我在PostgreSQL中使用Rails
3.0.10
。更新
这是我的控制台返回:
$ rails console --s
Loading development environment in sandbox (Rails 3.0.10)
Any modifications you make will be rolled back on exit
irb(main):001:0> Date.today
=> Wed, 04 Jan 2012
irb(main):002:0> Time.now
=> 2012-01-04 21:28:07 -0500
irb(main):003:0> Time.zone.now
=> Thu, 05 Jan 2012 02:28:18 UTC +00:00
irb(main):004:0> Date.yesterday
=> Wed, 04 Jan 2012
irb(main):005:0>
现在
yesterday
搞砸了,没有任何意义。 最佳答案
发生这种情况的原因是,calculations.rb正在为配置的时区调用Date类的“当前”方法(默认为UTC)。
如果打开Rails控制台,您可以通过执行以下操作来查看“Date.yesterday”的计算日期:
Time.zone.today
这可能会告诉您明天的日期。所以Date.yesterday对于rails来说今天就是今天。 ;)
您可以通过以下操作更直接地使用日期库:
Date.today.advance(:days => -1)
这将为您提供昨天的日期,如您期望的那样,而active_support返回:
Date.current.advance(:days => -1)
关于ruby-on-rails - 为什么Date.yesterday也算作Date.today?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8736695/