在Rails 3.0.x上以意大利格式处理日期文本输入

时间:2014-11-12 18:04:56

标签: ruby-on-rails date date-formatting

我使用Rails 3.0.7应用程序来处理许多日期"文本字段输入"用意大利语格式(%d/%m/%Y)

在我的Linux Box上(配置了意大利语语言环境)我运行应用程序并在文本框中插入日期为2014年11月12日的意大利语格式:

12/11/2014 (%d/%m/%Y)

这里Rails正确保存日期没有任何问题,如果我尝试插入日期如2014年11月27日同样的事情:

27/11/2014 (%d/%m/%Y)

在远程生产服务器上错误地保存日期​​交换日期和月份部分,所以我的输入:

12/11/2014

错误地保存到日期:

11/12/2014

和日期输入:

27/11/2014

提出异常,因为27不是有效月份......

我认为进入生产服务器的问题是日期格式系统设置错误(mm/dd/yyyy或许......)但服务器是由plesk面板管理的,我什么都看不到与日期格式系统设置有关...

所以问题是:我可以在Rails(v.3.0.x)中配置什么,以便我可以用意大利语格式保存文本字段日期输入? (可能避免编写大量代码......)

非常感谢...

2 个答案:

答案 0 :(得分:0)

您的第一步应该是设置区域设置:

# config/initializers/locale.rb
I18n.default_locale = :it

处理输入的几个选项:

1。用HTML5日期输入或Javascript"日期选择器"

替换文本输入

我真的推荐这个,因为你可以以便宜的方式获得验证,这是一个很好的功能。

2。使用Time/Date/DateTime .strptime

params_with_dates = params.merge({
  "date" => Date.strptime( params["date"], '%d/%m/%Y' )
})

Foo.create(params_with_dates);

补充阅读:

答案 1 :(得分:0)

Ruby 1.8使用日期格式转换%m /%d /%Y,1.9版本使用日期格式%d /%m /%Y,因此解决方案似乎正在切换到Ruby 1.9.x ... < / p>

示例,解析2015年12月28日的日期:

In Ruby 1.8: Date.parse("28/01/2015")
In Ruby 1.9: Date.parse("01/28/2015")