我在命名范围中遇到日期比较问题。我试图根据它的开始和结束日期来确定事件是否是最新的。以下是我使用哪种作品的命名范围,但不适用于具有相同开始和结束日期的事件。在Rails中进行日期比较
named_scope :date_current, :conditions => ["Date(start_date) <= ? AND Date(end_date) >= ?", Time.now, Time.now]
这将返回以下的记录,但它应该返回两个记录,没有之一......
>> Event.date_current
=> [#<Event id: 2161, start_date: "2010-02-15 00:00:00", end_date: "2010-02-21 00:00:00", ...]
什么它没有返回本以及
>> Event.find(:last)
=> #<Event id: 2671, start_date: "2010-02-16 00:00:00", end_date: "2010-02-16 00:00:00", ...>
服务器时间似乎在UTC,我认为这些条目以UTC存储在数据库中。任何想法,我做错了什么或尝试什么?
谢谢!
嗨拉里K.我昨天发现的是,第二个事件,我想要显示DID显示一天中的大部分时间,并且在UTC时间过去后似乎不再是当前事件。例如,从美国东部标准时间晚上8点开始,该事件不再是最新的,但是在美国东部时间下午5点,这确实使我认为这是一个时区问题。以下是我的本地机器上查询的开发日志输出: SELECT * FROM'events' WHERE((Date(start_date)<='2010-02-17 10:14:10'AND Date(end_date)> ='2010-02-17 10:14:10')AND(events.deleted_at IS NULL OR events.deleted_at>'2010-02-17 15:14:50')) – aressidi 2010-02-17 15:28:56
我已更新date_current named_scope以查看现在这样: named_scope:date_current,:conditions => [“Date(start_date)<=?AND Date(end_date)> =?”,Time.now.time_zone(“UTC”).to_date.to_s,Time。 now.in_time_zone( “UTC”)。TO_DATE。to_s 这会在日志中产生以下内容: SELECT * FROM'events' WHERE((Date(start_date)<='2010-02-17'AND Date(end_date)> ='2010-02-17') AND(events.deleted_at IS NULL OR events.deleted_at>'2010-02-17 15:22:44')) 也许时区需要为+5小时而不是-5小时才能工作...... – aressidi 2010-02-17 15:30:52