我有一个文本字段,其中填充了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期望的日期格式?
答案 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('-')