我在一个带有Postgres数据库的Rails应用程序中使用了jQuery UI Datepicker.默认实现使用mm / dd / yy日期格式显示所选日期,这正是我想要的.但是,将记录保存到数据库后,月份和日期将相反 – 然后显示为yy-dd-mm.所以选择3/11/2012试图保存为11月3日而不是3月11日,而像2012年3月31日这样的日期根本不存储,因为它不存在.
到目前为止,我已经下了3个不同的途径,试图解决这个问题:
1)首先尝试重新格式化文本字段,使显示器看起来像我想要的:
<%= f.text_field :foo,:value => (@model.foo.blank? ? '' : @model.foo.strftime('%m/%d/%Y')),class: "datepicker" %>
最初正确显示03/31/2012,但保存时仍然相反.
2)所以接下来我尝试改变日期存储的默认方式,认为会解决问题.如this question的答案所述,我将以下内容添加到config / locales / en.yml中:
# config/locales/en.yml en: date: formats: default: "%m/%d/%Y"
这根本没有任何区别.接下来我发现this question并尝试使用以下行创建config / initializers / date_formats.rb:
Date::DATE_FORMATS[:default]="%m/%d/%Y" Time::DATE_FORMATS[:default]="%m/%d/%Y %H:%M"
与上述相同,没有区别.
3)在玩了很多组合后,我发现DID的工作是在我对datepicker插件的调用中指定了yyyy-mm-dd格式 – 这与我想要的相反,但是至少日期可以是成功保存所以datepicker调用看起来像这样:
$( ".datepicker" ).datepicker({ dateFormat: 'yy-mm-dd' });
从日历中选择3月31日,填写2012-03-31的字段,保存后仍显示为2012-03-31.
但是,我可以如何让日期标记工具使用mm / dd / yy格式?我不能想象这是一件困难的事情,但是我错过了什么?我必须做一些事情如何日期存储在Postgres? (它们被指定为date,而不是datetime.)
解决方法
如果您碰巧使用RAW SQL查询,您可以在插入查询中使用to_date(‘2012年3月31日’,’
Postgres’to_date reference
现在,在您的客户端,您可以使用jquery日期选择器
$.datepicker.formatDate('dd-M-yy',Yourdate);
我使用DD星期一YYYY,因为它看起来更清晰.您可以根据需要使用mm / dd / yy格式或其他格式.在这些情况下,在postgre的to_date函数中使用所需的格式
请注意,我没有上面的代码测试.发表评论如果有任何问题或者你面临任何麻烦.
编辑:
在将数据插入数据库之前,您可以在rails视图中使用Date.parse(‘2011-06-18′),并将formatDate设置为datepicker中的’yy-mm-dd’.