(我的问题与此问题中描述的几乎相同,只是该答案在我的情况下不起作用。)
我在带有 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)所以接下来我尝试更改存储日期的默认方式,认为这样可以解决问题。如该问题的答案中所述,我将以下内容添加到config/locales/en.yml:
# config/locales/en.yml
en:
date:
formats:
default: "%m/%d/%Y"
这根本没有任何区别。接下来我发现了这个问题并尝试使用这些行创建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 中的存储方式做些什么?(它们被指定为日期,而不是日期时间。)