(我的问题几乎和这个问题中描述的一样,只有答案在我的情况下不起作用.)
我在带有Postgres数据库的Rails应用程序中使用jQuery UI Datepicker.默认实现使用mm/dd/yy日期格式来显示所选日期,这正是我想要的.但是,在将记录保存到数据库后,月份和日期相反 - 然后显示为yy-dd-mm.所以选择3/11/2012尝试保存为11月3日而不是3月11日,并且根本没有保存像2012年3月31日这样的日期,因为它不存在.
到目前为止,我已经走了三条不同的途径试图解决这个问题:
1)首次尝试重新格式化文本字段,以便显示我的想法:
<%= f.text_field :foo, :value => (@model.foo.blank? ? '' : @model.foo.strftime('%m/%d/%Y')), class: "datepicker" %>
Run Code Online (Sandbox Code Playgroud)
最初正确显示03/31/2012,但保存时仍然反转.
2)接下来我尝试更改存储日期的默认方式,认为可以解决问题.正如在这个问题的答案中所描述的,我在config/locales/en.yml中添加了以下内容:
# config/locales/en.yml
en:
date:
formats:
default: "%m/%d/%Y"
Run Code Online (Sandbox Code Playgroud)
这根本没有任何区别.接下来我发现了这个问题并尝试使用以下行创建config/initializers/date_formats.rb:
Date::DATE_FORMATS[:default]="%m/%d/%Y"
Time::DATE_FORMATS[:default]="%m/%d/%Y %H:%M"
Run Code Online (Sandbox Code Playgroud)
同上,没有区别.
3)在玩了很多组合之后,我发现DID工作的一件事是在我调用datepicker插件时指定了yyyy-mm-dd格式 - 它与我想要的相反,但至少日期可以是成功保存.所以datepicker调用如下所示:
$( ".datepicker" ).datepicker({ dateFormat: 'yy-mm-dd' });
Run Code Online (Sandbox Code Playgroud)
从日历中选择3月31日将使用2012-03-31填充该字段,并在保存后仍显示为2012-03-31.
但是我怎样才能让日期选择器以mm/dd/yy格式工作?我无法想象这是一件困难的事情,但我错过了什么?我是否必须对Postgres中的日期存储方式做些什么?(它们被指定为日期,而不是日期时间.)
我可以使用以下初始化程序让Rails显示mm/dd/yyyy:
date_format.rb
Date::DATE_FORMATS[:default]="%m/%d/%Y"
Run Code Online (Sandbox Code Playgroud)
或者l18n使用这个答案
但这并没有改变提交日期的方式.提交时:
10/02/2014
Run Code Online (Sandbox Code Playgroud)
将被解析为
@entry.photo_date
Mon, 10 Feb 2014
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种以mm/dd/yyyy格式提交日期的方法.
我希望能够集中完成这项工作,因此我不必在整个应用程序中重复代码
我不得不将".strftime("%H:%M")"附加到我在Rails项目中显示时间的任何内容.我有每个Concert对象的开始时间和结束时间,因此每当我想显示那些时间时,我必须附加".strftime("%H:%M")".
请注意,我不是要求更改日期格式.日期看起来很好(如MM/DD/YYYY).
什么是最好的解决方法?有没有办法设置默认时间格式?
(我很确定这只是一个Ruby的东西,但我是新手,所以我不确定.)