2010-10-30 86 views
0

我有一个从jQuery UI Datepicker填充日期的文本字段。根据用户在我的网站上的配置文件中选择的日期格式,日期选择器将使用DD-MM-YYYY或MM-DD-YYYY填充文本字段。如果日期填写为DD-MM-YYYY,则Ruby on Rails会正确解释此日期,并且日期被正确存储。但是当它是MM-DD-YYYY时,Ruby on Rails仍然认为它是DD-MM-YYYY,所以日期存储不正确。我怎样才能改变Rails期待的日期格式?带日期的文本字段,如何更改Rails期望的日期格式?

回答

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为一个月的一天,而第二个是把它作为一个月。

0

您可以发送带日期的参数(即:reverse => true),以便在日期由Rails解析之前,在控制器中可以反转数字(如果需要)。

1

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

如果在两个月内为应用程序添加新的语言环境,则只需更改视图,而不是服务器代码!

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

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

填补了隐藏字段与格式良好的,当用户选择在日期选择器:)一个新的日期。

0

可能会有所帮助。

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