저는 하루 종일 레일 양식으로 작업 해 왔으며 무작위로 테스트를 실시하여 25/12/2009 날짜를 시도했으며 큰 오류가 발생했습니다 .Rails의 기본 날짜 형식 (ddmmyyyy가 필요함)
이 시점에서 저는 레일이 영국 스타일 대신 미국 날짜 모드 (mm/dd/yyyy)로 설정되었음을 알게되었습니다 : dd/mm/yyyy.
dd/mm/yyyy 형식으로 모든 날짜를 자동으로 처리하도록 레일을 설정하려면 어떻게해야합니까? 설정에서
저는 하루 종일 레일 양식으로 작업 해 왔으며 무작위로 테스트를 실시하여 25/12/2009 날짜를 시도했으며 큰 오류가 발생했습니다 .Rails의 기본 날짜 형식 (ddmmyyyy가 필요함)
이 시점에서 저는 레일이 영국 스타일 대신 미국 날짜 모드 (mm/dd/yyyy)로 설정되었음을 알게되었습니다 : dd/mm/yyyy.
dd/mm/yyyy 형식으로 모든 날짜를 자동으로 처리하도록 레일을 설정하려면 어떻게해야합니까? 설정에서
파일 : 설정/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
이 그냥 출력을 처리에서 미국 스타일뿐 아니라 표준 ...이없는 그 무엇이다 묻고. – Subimage
이것은 매우 오래된 답변이며 Rails 4 또는 5에는 적용되지 않습니다. – danielricecodes
당신은 더 이런 일을 찾고, 즉 솔루션은 여전히 너무 우아한 아니지만.
http://source.mihelac.org/2006/9/13/parsing-european-date-format-in-ruby-rails
당신은 이제 변형 된 레일 @ 크리스 Ballance의 솔루션 노트를 사용하는 경우 s Date
클래스를 직접 사용하면 솔루션에 uninitialized constant ActiveSupport
오류가 표시됩니다.
참조 : uninitialized constant ActiveSupport::CoreExtensions
업데이트 된 인수 :
my_date_formats = { :default => '%d/%m/%Y' }
Time::DATE_FORMATS.merge!(my_date_formats)
Date::DATE_FORMATS.merge!(my_date_formats)
당신은 당신의 설정/로케일의 날짜 형식을 사용하여 국제화 (I18N)
그냥 추가 (또는 변경) 변경할 수 있습니다 /en.yml :
en:
date:
order:
- :day
- :month
- :year
명시 적으로 원하는 것을 수행하는 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
업데이트 국제화 ...
date:
formats:
default: "%m/%d/%Y"
short: "%b %d"
long: "%B %d, %Y"
질문에 무관
하지만 : 일/월/년 사방하지만 영국 – Pierre