我有以下模型和方法:

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/

10-13 04:43