(我的问题和described in this question差不多,只是这个答案在我的情况下不起作用。)
我在一个带有Postgres数据库的Rails应用程序中使用jQuery UI Datepicker。默认实现使用mm/dd/yy日期格式来显示所选日期,这正是我想要的。但是,在我将记录保存到数据库后,月份和日期将被反转,然后显示为yy-dd-mm。因此,选择3/11/2012试图节省11月3日,而不是3月11日,和3/31/2012一样的日期根本不保存,因为它不存在。
到目前为止,我已经走了三条不同的道路试图解决这个问题:
1)第一次尝试是重新设置文本字段的格式,以便显示内容符合我的要求:
<%= f.text_field :foo, :value => (@model.foo.blank? ? '' : @model.foo.strftime('%m/%d/%Y')), class: "datepicker" %>
最初正确地显示了2012年3月31日,但保存时仍然相反。
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)在尝试了大量的组合之后,我发现唯一有效的方法是在调用datepicker插件时指定yyyy-mm-dd格式——这与我想要的相反,但至少可以成功保存日期。所以datepicker调用如下所示:
$( ".datepicker" ).datepicker({ dateFormat: 'yy-mm-dd' });
从日历中选择3月31日将用2012-03-31填充该字段,保存后仍显示为2012-03-31。
但我究竟怎样才能让datepicker使用mm/dd/yy格式呢?我无法想象这是一件很难做的事,但我错过了什么?我需要做些什么来处理这些日期是如何存储在Postgres中的吗?(它们被指定为日期,而不是日期时间。)
最佳答案
这取决于你如何在数据库中存储数据。
如果碰巧使用原始sql查询,则可以在insert查询中使用to_date('31 Mar 2012', 'DD Mon YYYY')
。
博士后
现在,在客户端,在jquery日期选择器中,您可以使用
$.datepicker.formatDate('dd-M-yy', Yourdate);
我使用DD Mon YYYY是因为它看起来更清晰。您可以根据需要使用
to_date
格式或其他格式。在这些情况下,在postgre的mm/dd/yy
函数中使用所需的格式请注意,我没有测试以上代码。如果有任何问题或遇到任何麻烦,请留言。
编辑:
在将数据插入数据库之前,可以在rails视图中使用
to_date
,并在datepicker中将Date.parse('2011-06-18')
设置为formatDate
。关于ruby-on-rails-3 - Rails3/jQuery UI Datepicker-保存时将月份和日期反转,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10035772/