복붙노트

[RUBY-ON-RAILS] 레일의 기본 날짜 형식은 (는 DDMMYYYY 할 필요)

RUBY-ON-RAILS

레일의 기본 날짜 형식은 (는 DDMMYYYY 할 필요)

레일은 하루 종일 형성과 내가 일한지 난 그냥 무작위로 그것을 테스트하고 날짜 25/12/2009을 시도하고 그것은 큰 오류를 내놓았다.

일 / 월 / 년 : 내가 레일 대신 영국 스타일의 미국 날짜 모드 (월 / 일 / 년)로 설정되어 있는지 실현이 점에 있었다.

어떻게 자동으로 일 / 월 / 년 형식의 모든 날짜를 다루는 레일을 설정할 수 있습니까?

해결법

  1. ==============================

    1.설정 파일에서 : 설정 / environment.rb에 "

    설정 파일에서 : 설정 / 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

  2. ==============================

    2.이제 직접 Date 클래스를 수정 레일 것을 @ 크리스 Ballance의 솔루션 노트를 사용하는 경우에는 솔루션 초기화되지 않은 상수의 ActiveSupport의 오류가 발생합니다 그래서.

    이제 직접 Date 클래스를 수정 레일 것을 @ 크리스 Ballance의 솔루션 노트를 사용하는 경우에는 솔루션 초기화되지 않은 상수의 ActiveSupport의 오류가 발생합니다 그래서.

    보다: 초기화되지 않은 상수의 ActiveSupport :: CoreExtensions

    업데이트 된 인수 :

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

    3.당신은 국제화를 사용하여 날짜 형식을 변경할 수 있습니다 (I18N)

    당신은 국제화를 사용하여 날짜 형식을 변경할 수 있습니다 (I18N)

    이 단지 추가 (또는 변경) 당신의 설정 / 로케일 / en.yml :

    en:
      date:
        order:
          - :day
          - :month
          - :year
    
  4. ==============================

    4.해당 솔루션은 여전히 ​​너무 우아한 아니지만 당신은이 같은 뭔가를 더 찾고 있습니다.

    해당 솔루션은 여전히 ​​너무 우아한 아니지만 당신은이 같은 뭔가를 더 찾고 있습니다.

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

  5. ==============================

    5.업데이트 국제화 ...

    업데이트 국제화 ...

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

    6.나는 명시 적으로 내가하고 싶은 일을하고, 어디에서나들을 사용 getter와 mydatefield_formatted 이름 세터를 추가하여이 문제를 해결했다. 내가 여기를 떠날 줄 알았는데, 그래서 아마 이유의 쇼핑 목록이 꽤 맘이 작업을 수행하지만하지.

    나는 명시 적으로 내가하고 싶은 일을하고, 어디에서나들을 사용 getter와 mydatefield_formatted 이름 세터를 추가하여이 문제를 해결했다. 내가 여기를 떠날 줄 알았는데, 그래서 아마 이유의 쇼핑 목록이 꽤 맘이 작업을 수행하지만하지.

    응용 프로그램 / 모델 / 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
    
  7. from https://stackoverflow.com/questions/1610485/default-date-format-in-rails-need-it-to-be-ddmmyyyy by cc-by-sa and MIT license