为什么Date.yesterday也算作Date.today呢?

我有以下模型和方法:

class UserPrice  Date.today) end def self.yesterday where(:purchase_date => Date.yesterday) end 

为什么在我的表格上,如果我给出我的date_select字段:purchase_date 1/4/2012( yesterday方法)它也算作今天( today方法),如果我给它1/5/2012(今天)它是零?

PS我正在使用Rails 3.0.10和PostgreSQL。


更新

这是我的控制台返回:

 $ 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搞砸了,没有意义….

发生这种情况是因为calculate.rb正在为配置的时区调用Date类的“当前”方法(默认为UTC)。

如果您打开rails控制台,您可以通过执行以下操作查看“Date.yesterday”计算的日期:

 Time.zone.today 

这可能会告诉你明天的约会。 因此今天,当今铁路看起来像今天这样的Date.yesterday。 ;)

通过执行以下操作,您可以更直接地使用日期库:

 Date.today.advance(:days => -1) 

这将给你昨天的日期,就像你期望的那样,而active_support正在返回:

 Date.current.advance(:days => -1) 

如果您使用Time类,则可以访问UTC(或“zulu”)时区,而不是使用Date类中的环境时区。

 class UserPrice < ActiveRecord::Base attr_accessible :price, :purchase_date, def self.today where(purchase_date: today_utc_date) end def self.yesterday where(purchase_date: today_utc_date.yesterday) end private def today_utc_date @today ||= Time.zone.today end end 

此外,如果您需要处理外部日期,例如params[:purchase_date]

 Time.parse(params[:purchase_date]).utc.to_date