我有以下模型和方法:
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。我正在使用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
搞砸了,没有意义......
答案 0 :(得分:11)
这是因为calculate.rb正在为配置的时区调用Date类的“当前”方法(默认为UTC)。
如果您打开rails控制台,您可以通过以下方式查看“Date.yesterday”计算的日期:
Time.zone.today
这可能会告诉你明天的约会。所以今天看到今天铁路看到的Date.yesterday。 ;)
您可以通过以下方式更直接地使用日期库:
Date.today.advance(:days => -1)
这会给你昨天的日期,就像你期望的那样,而active_support正在返回:
Date.current.advance(:days => -1)
答案 1 :(得分:0)
如果您使用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