Ruby on Rails,使用适当的日期格式保存到数据库

时间:2017-02-24 21:30:55

标签: ruby-on-rails date internationalization date-formatting

我目前正在与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,如下所示:< / p>

@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格式的参数(或其他格式取决于环境)。

是否有一种简单的方法可以以正确的数据库格式保存日期而无需转换日期(这可能意味着根据区域设置转换每种可能日期格式的日期?)

1 个答案:

答案 0 :(得分:0)

假设PostgreSQL为您提供日期格式,即:“2017-02-24” 你的目标是将其格式化为打印:“2017/02/24” 试试这个

postgres_date = "2017-02-24"

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

output =&gt; “2017年2月24日”

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

output =&gt; “02/24/2017 12:00:00 AM”

反之,假设你有一个约会mm/dd/YYYY:“04/27/2017”你可以这样做:

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

output =&gt; 2017-24-02`

然后

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

希望它有所帮助。