通过格式设置和显示 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'。

我在 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,然后提交:

我想要完全相同的设置。我唯一想改变的是格式。将 yyyy-mm-dd 的格式更改为 mm/dd/yyyy。因此,用户会选择一个日期,然后将值 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")

这将以您想要的格式显示创建日期。然后,当你编辑它时,它仍然会以月、日、年格式显示。

我找到的最佳解决方案是一个两步过程:

  1. 允许日期以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 中添加,因为当您使用日期选择器选择日期时:它会将此格式的日期加载到文本框中。

  2. 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 属性时:使用文本框,日期也将以正确的格式显示。