带日期的文本字段,如何更改Rails期望的日期格式?

时间:2010-10-30 04:49:19

标签: ruby-on-rails

我有一个文本字段,其中填充了jQuery UI Datepicker中的日期。根据用户在我的网站上的个人资料中选择的日期格式,datepicker将使用DD-MM-YYYY或MM-DD-YYYY填写文本字段。如果日期以DD-MM-YYYY填写,则Ruby on Rails会正确解释此日期并正确存储日期。但是当它是MM-DD-YYYY时,Ruby on Rails仍然认为它是DD-MM-YYYY,因此日期存储不正确。如何更改Rails期望的日期格式?

4 个答案:

答案 0 :(得分:1)

您可以使用Date.strptime来使用您想要的任何格式:

>> RUBY_DESCRIPTION
=> "ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]"

>> require 'date'
=> true

>> Date.strptime('03/04/2010', '%d/%m/%Y').strftime('%c')
=> "Sat Apr  3 00:00:00 2010"

>> Date.strptime('03/04/2010', '%m/%d/%Y').strftime('%c')
=> "Thu Mar  4 00:00:00 2010"

所以第一个是将03作为月份的日期,而第二个是将其作为月份。

答案 1 :(得分:1)

在我看来,您不应该使用服务器端代码来修复或解决视图问题。 您的服务器代码应该只使用一种格式,视图应以用户想要的任何方式显示它。

如果在两个月后,为应用程序添加新的区域设置,则只需更改视图,而不是服务器代码!

一种解决方案应该是使用隐藏字段。隐藏字段填充服务器处理的格式(例如%d /%m /%Y格式)。 用于日期选择器的文本字段应该是一个简单的text_field_tag,Rails会忽略它。

使用onSelect回调: http://jqueryui.com/demos/datepicker/#event-onSelect

当用户在日期选择器中选择新日期时,用正确的格式填写隐藏字段:)。

答案 2 :(得分:0)

您可以使用日期发送一个参数(例如:reverse => true),这样在控制器中您可以在Rails解析日期之前反转这些数字(如果需要)。

答案 3 :(得分:0)

可能会有所帮助。

a = "10-30-2010".split('-')
a[0],a[1] = a[1],a[0]
a = a.join('-')