通过格式设置和显示 rails 中的日期:%m/%d/%Y
Set and Display Dates in rails via format: %m/%d/%Y
如果您想通过 text_field 将 date
属性保存在 rails 表单中:默认情况下 rails 希望您将日期格式设置为:%Y-%m-%d
。例如:'2016-8-25'。
- 我想把日期写成
%m/%d/%Y
的格式。例如:“2016 年 8 月 25 日”。
- 编辑此日期属性时:我希望它也以相同的格式显示日期。
我在 config/locals/en.yml
文件中指定了它,但它不起作用:
en:
date:
formats:
default: "%m/%d/%Y"
如果有其他策略与上述不同:请告诉我。
最终:我所有的日期属性应用程序都使用 bootstrap-datepicker-rails gem。在表单中:这个 gem 希望日期采用上述格式,无论如何,日期采用这种格式是有意义的。我不想为了让 rails 理解这种格式而覆盖所有的 writer 属性。
更新
我的堆栈溢出问题似乎有些混乱。用户实际上并不是手动输入日期。他们正在使用日期选择器。当用户选择一个日期时:它会将日期保存在文本框中,格式为:mm/dd/yyyy。这就是这个小型内部应用程序的客户想要显示日期的方式(他们希望以这种方式显示日期是有道理的,因为他们住在美国,这是那里典型的日期格式)。
最终情况如下:
这里是表单中的相关输入字段:
<div class="field">
<%= f.label :some_date %><br>
<%= f.text_field :some_date, data: {provide: 'datepicker'} %>
</div>
如果您手动输入字符串:2016-1-20
,然后提交:
- Rails 知道 如何获取
2016-1-20
的字符串,将其转换为日期,然后将该日期保存到数据库中。
- Rails 还 知道 如果用户想要返回并编辑该日期,如何以
2016-1-20
的格式重新显示该日期。
我想要完全相同的设置。我唯一想改变的是格式。将 yyyy-mm-dd
的格式更改为 mm/dd/yyyy
。因此,用户会选择一个日期,然后将值 1/20/2016
输入到输入字段中。那会被提交。
- Rails 会 知道 如何将其转换为日期并将其保存到数据库中。
- 如果用户以后想编辑这个日期:它会以
1/20/2016
的格式在文本字段中重新显示日期。
希望这能消除任何困惑。
您是否在使用此方法的视图中使用 l
方法?否则它不会工作。
所以看起来像这样:
<%= l your_date %>
另一种方法是在您的 config/initializers 文件夹中创建一个文件,例如可以将其命名为 date_time.rb,然后使用:
Date::DATE_FORMATS[:default] = "%m/%d/%Y"
要以您想要的格式显示日期,您可以使用内置 strftime
。
例如,如果要显示项目的 created_at 日期,则可以使用以下代码以月、日、年的格式显示保存日期。此代码将出现在您的视图中的页面中:
@item.created_at.strftime("%m/%d/%Y")
或 updated_at 日期:
@item.updated_at.strftime("%m/%d/%Y")
这将以您想要的格式显示创建日期。然后,当你编辑它时,它仍然会以月、日、年格式显示。
我找到的最佳解决方案是一个两步过程:
允许日期以mm/dd/yyyy
的格式保存
只需在 american_date gem. And with that: when you enter into a text_field for a date the format of: mm/dd/yyyy
(ex: 1/30/2016) it will save the correct date! This works wonderfully with the bootstrap-datepicker-rails gem 中添加,因为当您使用日期选择器选择日期时:它会将此格式的日期加载到文本框中。
以mm/dd/yyyy
的格式显示日期
然而,即使安装了 american_date gem:rails 仍然希望以 yyyy-mm-dd
格式显示日期。
示例:在text_field内,例如:<%= f.text_field :date %>
,当用户返回edit
那个日期,它会以yyyy-mm-dd
的格式重新显示日期,这不是我们想要的。我们希望 rails 以 mm/dd/yyyy
格式重新显示日期。
另一个例子:如果你有一个 erb 标签,比如 <%= @blog.some_date %>
那么再说一遍:rails 将以 yyyy-mm-dd
的格式显示日期。再说一次:这不是我们想要的。我们希望 erb 标签以 mm/dd/yyyy
的格式自动重新显示日期
要解决此问题:您有两个选择:
一种选择是打开您的 config/locals/en.yml
文件并使用此 post 的原始问题中指定的设置。我个人不喜欢这种设置,因为每次要在应用中显示日期时,都需要记住使用 l
方法。
另一个选项(我最喜欢的)是转到您的 config/initializers
目录并创建一个新文件。将文件命名为您想要的任何名称。我将文件命名为 date_display_format.rb
。然后在里面放这一行:Date::DATE_FORMATS[:default] = "%m/%d/%Y"
。现在:您的 erb 标签中的日期将以正确的格式显示,当您去编辑表单中的 date
属性时:使用文本框,日期也将以正确的格式显示。
如果您想通过 text_field 将 date
属性保存在 rails 表单中:默认情况下 rails 希望您将日期格式设置为:%Y-%m-%d
。例如:'2016-8-25'。
- 我想把日期写成
%m/%d/%Y
的格式。例如:“2016 年 8 月 25 日”。 - 编辑此日期属性时:我希望它也以相同的格式显示日期。
我在 config/locals/en.yml
文件中指定了它,但它不起作用:
en:
date:
formats:
default: "%m/%d/%Y"
如果有其他策略与上述不同:请告诉我。
最终:我所有的日期属性应用程序都使用 bootstrap-datepicker-rails gem。在表单中:这个 gem 希望日期采用上述格式,无论如何,日期采用这种格式是有意义的。我不想为了让 rails 理解这种格式而覆盖所有的 writer 属性。
更新
我的堆栈溢出问题似乎有些混乱。用户实际上并不是手动输入日期。他们正在使用日期选择器。当用户选择一个日期时:它会将日期保存在文本框中,格式为:mm/dd/yyyy。这就是这个小型内部应用程序的客户想要显示日期的方式(他们希望以这种方式显示日期是有道理的,因为他们住在美国,这是那里典型的日期格式)。
最终情况如下:
这里是表单中的相关输入字段:
<div class="field">
<%= f.label :some_date %><br>
<%= f.text_field :some_date, data: {provide: 'datepicker'} %>
</div>
如果您手动输入字符串:2016-1-20
,然后提交:
- Rails 知道 如何获取
2016-1-20
的字符串,将其转换为日期,然后将该日期保存到数据库中。 - Rails 还 知道 如果用户想要返回并编辑该日期,如何以
2016-1-20
的格式重新显示该日期。
我想要完全相同的设置。我唯一想改变的是格式。将 yyyy-mm-dd
的格式更改为 mm/dd/yyyy
。因此,用户会选择一个日期,然后将值 1/20/2016
输入到输入字段中。那会被提交。
- Rails 会 知道 如何将其转换为日期并将其保存到数据库中。
- 如果用户以后想编辑这个日期:它会以
1/20/2016
的格式在文本字段中重新显示日期。
希望这能消除任何困惑。
您是否在使用此方法的视图中使用 l
方法?否则它不会工作。
所以看起来像这样:
<%= l your_date %>
另一种方法是在您的 config/initializers 文件夹中创建一个文件,例如可以将其命名为 date_time.rb,然后使用:
Date::DATE_FORMATS[:default] = "%m/%d/%Y"
要以您想要的格式显示日期,您可以使用内置 strftime
。
例如,如果要显示项目的 created_at 日期,则可以使用以下代码以月、日、年的格式显示保存日期。此代码将出现在您的视图中的页面中:
@item.created_at.strftime("%m/%d/%Y")
或 updated_at 日期:
@item.updated_at.strftime("%m/%d/%Y")
这将以您想要的格式显示创建日期。然后,当你编辑它时,它仍然会以月、日、年格式显示。
我找到的最佳解决方案是一个两步过程:
允许日期以mm/dd/yyyy
的格式保存只需在 american_date gem. And with that: when you enter into a text_field for a date the format of:
mm/dd/yyyy
(ex: 1/30/2016) it will save the correct date! This works wonderfully with the bootstrap-datepicker-rails gem 中添加,因为当您使用日期选择器选择日期时:它会将此格式的日期加载到文本框中。以
的格式显示日期mm/dd/yyyy
然而,即使安装了 american_date gem:rails 仍然希望以
yyyy-mm-dd
格式显示日期。示例:在text_field内,例如:
<%= f.text_field :date %>
,当用户返回edit
那个日期,它会以yyyy-mm-dd
的格式重新显示日期,这不是我们想要的。我们希望 rails 以mm/dd/yyyy
格式重新显示日期。另一个例子:如果你有一个 erb 标签,比如
的格式自动重新显示日期<%= @blog.some_date %>
那么再说一遍:rails 将以yyyy-mm-dd
的格式显示日期。再说一次:这不是我们想要的。我们希望 erb 标签以mm/dd/yyyy
要解决此问题:您有两个选择:
一种选择是打开您的
config/locals/en.yml
文件并使用此 post 的原始问题中指定的设置。我个人不喜欢这种设置,因为每次要在应用中显示日期时,都需要记住使用l
方法。另一个选项(我最喜欢的)是转到您的
config/initializers
目录并创建一个新文件。将文件命名为您想要的任何名称。我将文件命名为date_display_format.rb
。然后在里面放这一行:Date::DATE_FORMATS[:default] = "%m/%d/%Y"
。现在:您的 erb 标签中的日期将以正确的格式显示,当您去编辑表单中的date
属性时:使用文本框,日期也将以正确的格式显示。