ActiveRecord中从rails 2.3到3.2的日期转换

时间:2013-10-10 11:39:47

标签: ruby-on-rails ruby-on-rails-3 date datetime activerecord

我正在从rails 2.3升级到3.2,而我在转换日期时遇到了问题。

在rails 2.3中,日期转换默认格式为mm / dd / yyyy,当我将此格式的字符串分配给active_record模型时,它会正确转换日期。例如。

我有一个用户对象(active_record对象)和

在rails 2.3中

user.registered_on = "10/03/2013" #=> Oct 3, 2013

但是在rails 3.2中也是如此。

user.registered_on = "10/03/2013" #=> March 10, 2013

如何解决这个问题?

我已尝试在其中一个初始值设定项文件中设置Date :: DATE_FORMATS [:default] ='%m /%d /%Y',但这没有任何好处。

我甚至为日期设置了区域设置,但这也不起作用。

重现此问题的一个完美方法是:

  1. 创建两个应用程序,一个在rails 2.3.x版本中,另一个在rails 3.2.x版本中。

  2. 使用至少一个日期时间字段在每个应用程序中创建一个模型。

  3. 为两个应用程序创建和迁移数据库。

  4. 在每个应用程序中从终端转到rails控制台。

  5. 创建一个active_record模型对象,并将此“10/3/2013”​​字符串分配给datetime字段,并查看结果是不同的日期。

  6. 我只需要一个解决方案,如何修复此日期或日期时间转换并使其与rails 2.3相同

2 个答案:

答案 0 :(得分:1)

gem“american_date”解决了这个问题。

https://github.com/jeremyevans/ruby-american_date

答案 1 :(得分:0)

我猜你已升级了ruby版本?

$ ruby --version
ruby 1.8.7
$ ruby -r date -e "puts Date.parse('10/3/2013').month"  
10

$ ruby --version
ruby 1.9.3p327
$ ruby -r date-e "puts Date.parse('10/3/2013').month"  
3

请参阅Ruby 1.87 vs 1.92 Date.parse