【发布时间】:2017-02-24 21:30:55
【问题描述】:
我目前正在与 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 格式的日期。
然后,一旦提交表单,我必须从 params(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 格式的参数(或其他格式,具体取决于语言环境) .
有没有一种简单的方法可以将日期保存为适当的数据库格式,而无需转换日期(这可能意味着根据区域设置为每种可能的日期格式转换日期?)
【问题讨论】:
-
您的日期选择器能否显示一种格式但在表单中存储另一种格式?这样,您可以在任何地方使用 ISO8601 格式 (YYYY-MM-DD),除了在应用的最边缘。
标签: ruby-on-rails date internationalization date-formatting