3

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

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

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

在轨道 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 字段,然后查看结果都是不同的日期。

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

4

2 回答 2

1

gem "american_date" solved this problem.

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

于 2013-10-14T11:33:40.877 回答
0

我猜你已经升级了你的红宝石版本?

$ 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 与 1.92 Date.parse

于 2013-10-14T10:55:12.267 回答