2017-02-24 65 views
1

我目前正在使用Rails国际化和日期格式。Ruby on Rails,以适当的日期格式保存到数据库

我正在开发一款应用程序,最终将针对美国市场以及英法加拿大市场进行部署。

在Postgresql数据库中日期格式为yyyy-mm-dd(即2017-02-24),当我想从数据库中检索日期并将其显示在视图或表单中时,我会使用以下方法。

当显示的日期,我会用:

<h5><%=p.date.strftime("%m/%d/%Y - %l:%M:%S %p")%></h5> 

当表格处理他们,我会找回在控制器中的日期,然后这样做:

@receivable.date_posted = Date.today.strftime("%m/%d/%Y") 

然后它会显示使用格式正确。 在窗体中,我有一个日期选择器,以适当的m/d/yyyy格式选择日期。

然后,一旦表单被提交,我必须从参数(m/d/yyyy格式)中获取日期,并将其重新格式化为适当的数据库日期格式yyyy-mm-dd,如下所示:

@receivable.date_posted = Date.strptime(params[:date_posted],"%m/%d/%Y") 

我很快意识到,一旦我尝试实施加拿大日期格式,这将有点疯狂,所以我已经研究了国际化。

我已经创造了市场正常的语言环境和现在使用以下时,我想显示正确的日期格式

不过,我还是觉得自己困惑​​的是在表格处理日期时,该怎么办。

现在我不必格式化检索记录的日期,我在表单中使用以下内容。

<%= f.text_field :date_posted, :value => (l f.object.date_posted, format: :notime), class: "form-control input-sm text-center",id: "receivable_date_posted", style: "display: inline-block; vertical-align: middle; width: 60%; margin: 0 5px 0 0;"%> 

但是,当我尝试更新或在适当的控制器事件创建记录因为日期仍来自于M/d/yyyy格式(在params中,另一种格式取决于不解决我的问题在本地)。

有一个简单的方法来保存在适当的数据库格式的日期,而无需转换日期(这可能意味着转换日期取决于区域每一个可能的日期格式?)

+1

您的日期选择器可以显示一种格式,但在表单中另存一个格式吗?这样,除了应用程序的边缘,您可以使用ISO8601格式(YYYY-MM-DD)。 –

回答

0

假设PostgreSQL,请提供您它的日期格式E: “2017年2月24日” 和你的目标是将其格式打印: “24/02/2017” 试试这个

postgres_date = "2017-02-24" 

date_goal = Date.parse(postgres_date).strftime("%m-%d-%Y").gsub('-', '/') 

输出=> “2017年2月24日”

date_goal = Date.parse(postgres_date).strftime("%m-%d-%Y %l:%M:%S %p").gsub('-', '/') 

输出=> “2017年2月24日上午12时00分00秒”

和反向的方式,假设你有一个日期mm/dd/YYYY,如: “2017年4月27日” 你可以这样做:

actual_date_format = "02/24/2017" 
date_goal = actual_date_format.split('/').reverse.join('-') 

输出=> 2017-24-02`

然后

Date.strptime(date_goal, '%Y/%d/%m') 

希望它帮助。

+0

感谢您的回答。我实际上是在不使用这种转换的情况下寻找解决方案。如果我只使用一种日期格式(mm/dd/yyyy),但是当我们部署到在某些省份使用yyyy/mm/dd或dd/mm/yyyy的加拿大时,这很有效,我将不得不复制这些转换和帐户为每个可能的日期格式。 它最终会看起来像这样: 情况下current_user.locale 当“CAN-EN” #Do一些日期转换这里 当“CAN-FR” #Do另一个日期转换这里 当“美EN ' #做另一个日期转换 结束 – Dan