以美国格式提交日期:mm/dd/yyyy

jam*_*ree 9 ruby-on-rails date ruby-on-rails-3 ruby-on-rails-4

我可以使用以下初始化程序让Rails显示mm/dd/yyyy:

date_format.rb

 Date::DATE_FORMATS[:default]="%m/%d/%Y"
Run Code Online (Sandbox Code Playgroud)

或者l18n使用这个答案

但这并没有改变提交日期的方式.提交时:

10/02/2014
Run Code Online (Sandbox Code Playgroud)

将被解析为

 @entry.photo_date
 Mon, 10 Feb 2014
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种以mm/dd/yyyy格式提交日期的方法.

我希望能够集中完成这项工作,因此我不必在整个应用程序中重复代码

sma*_*thy 5

在现代红宝石中(即使用prepend),您可以在Rails的前面插入自己的类型转换。您将要针对所使用的其他任何日期/时间格式执行此操作。这是的代码Date,只需将其粘贴在config/initializers/typecasts.rb或某处:

module Typecasting
  module Date
    def cast_value v
      ::Date.strptime v, "%m/%d/%Y" rescue super
    end  
  end  

  ::ActiveRecord::Type::Date.prepend Date
end
Run Code Online (Sandbox Code Playgroud)

Rails将尝试使用美式格式,如果不起作用,则退回到使用内置方法。


neo*_*neo 2

尝试这个:

irb(main):001:0> today = Date.today
=> Tue, 06 Jan 2015
irb(main):003:0> today.strftime("%m/%d/%Y")
=> "01/06/2015"
Run Code Online (Sandbox Code Playgroud)

所以在你的情况下,@entry.photo_date.strftime("%m/%d/%Y")应该有效。

  • 这可能有效,但我正在寻找一种在初始化程序中执行此操作的方法。我不想在整个申请过程中转换日期 (4认同)