Rails中的默认日期格式(需要它是ddmmyyyy)

我一直在使用rails表格,我只是随机测试它并尝试了日期25/12/2009,它出现了一个巨大的错误。

就在这时我意识到导轨设置为美国日期模式(mm / dd / yyyy)而不是英国风格:dd / mm / yyyy。

如何设置rails以自动处理dd / mm / yyyy格式的所有日期?

在您的设置文件中:config / environment.rb“

my_date_formats = { :default => '%d/%m/%Y' } ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS.merge!(my_date_formats) ActiveSupport::CoreExtensions::Date::Conversions::DATE_FORMATS.merge!(my_date_formats) 

来源: http : //thedevelopercorner.blogspot.com/2009/03/change-default-date-format-in-ruby-on.html

如果您正在使用@Chris Ballance的解决方案,请注意Rails现在直接修改Date类,因此您将在解决方案中获得uninitialized constant ActiveSupport错误。

请参阅: 未初始化的常量ActiveSupport :: CoreExtensions

更新的参数:

 my_date_formats = { :default => '%d/%m/%Y' } Time::DATE_FORMATS.merge!(my_date_formats) Date::DATE_FORMATS.merge!(my_date_formats) 

您可以使用国际化(I18n)更改日期格式

只需在config / locales / en.yml中添加(或更改):

 en: date: order: - :day - :month - :year 

你正在寻找更多这样的东西,尽管这个解决方案仍然不太优雅。

http://source.mihelac.org/2006/9/13/parsing-european-date-format-in-ruby-rails

更新了I18n ……

 date: formats: default: "%m/%d/%Y" short: "%b %d" long: "%B %d, %Y" 

我通过添加名为mydatefield_formatted的getter和setter解决了这个问题,它明确地做了我想做的事情,并在任何地方使用它们。 可能是购买清单的理由不这样做,但我非常喜欢它,所以我想我会留在这里。

应用程序/模型/ mymodel.rb

 class Mymodel < ActiveRecord::Base include ValueFormatters add_value_formatters etc. end 

LIB / value_formatters.rb

 module ValueFormatters extend ActiveSupport::Concern module ClassMethods def add_value_formatters columns.each do |column| case column.type when :datetime define_method("#{column.name}_formatted") { General.format_datetime(self.read_attribute(column.name)) } define_method("#{column.name}_formatted=") {|value| self.update_attribute(column.name, General.parse_datetime(value)) } when :date define_method("#{column.name}_formatted") { General.format_date(self.read_attribute(column.name)) } define_method("#{column.name}_formatted=") {|value| self.update_attribute(column.name, General.parse_date(value)) } when :boolean define_method("#{column.name}_formatted") { General.format_boolean(self.read_attribute(column.name)) } define_method("#{column.name}_formatted=") {|value| self.update_attribute(column.name, General.parse_boolean(value)) } else # do nothing end unless self.class.respond_to?("#{column.name}_formatted") end end end end 

LIB / general.rb

 class General def self.parse_date(value, end_of_day = false) result = nil begin if value.present? if value.length == 8 result = DateTime.strptime(value, '%d/%m/%y') if result.year > Time.new.year + 1 result = DateTime.new(result.year - 100, result.month, result.day) end else result = DateTime.strptime(value, '%d/%m/%Y') end end rescue Exception=>e # end result = result + 23.hours + 59.minutes + 59.seconds if result && end_of_day result end def self.parse_datetime(value) result = nil begin if value.present? result = DateTime.strptime(value, '%d/%m/%Y %H:%M') result = nil if result < 100.years.ago end rescue Exception=>e # end result end def self.format_date(value) value.present? ? value.strftime('%d/%m/%Y') : '' end def self.format_datetime(value) value.present? ? value.strftime('%d/%m/%Y at %H:%M') : '' end def self.format_boolean(value, default = nil) value = default if value == nil case value when true 'Yes' when false 'No' else 'Unspecified' end end def self.parse_boolean(value, default = false) case value.to_s.downcase when 'true' when 'yes' when '1' when 'on' true when 'false' when 'no' when '0' when 'off' false else default end end end