Domanda

ho incontrato un po 'di tempo con i formati di data nella nostra applicazione Rails.

Ho un campo della data, a nostro avviso, che voglio essere formattato come gg / mm / aa . Questo è il modo che l'utente si aspetta di inserire le loro date, ed il controllo DatePicker utilizza questo formato.

Tuttavia, Active Record sembra essere in attesa mm / gg / aa .

Se entro 01/03/2010 , questo viene messo come 3 gennaio 2010 .

Se entro 25/03/2010 , questo viene messo in un nullo .

Come faccio ad avere ActiveRecord aspettarsi sua Maestà formato data?

È stato utile?

Soluzione

DateTime Rails' tenta di rilevare automaticamente la formattazione. E 'in grado di rilevare i seguenti formati: mm/dd/yy o dd-mm-yy o yyyy-mm-dd o yyyy/mm/dd. Si potrebbe scimmia-patch DateTime.parse, ma avrei preferito passare la questione al Visualizza della tua applicazione.

Io consiglio sempre di usare yyyy-mm-dd [hh:mm:ss] come una rappresentazione di stringa per una data. Controllare la documentazione del DatePicker se supporta diversi formati di data-.

Il jQuery data-selettore per esempio ha questo coperto di dateFormat (per i dati che vengono inviati al server, impostare questa yyyy-mm-dd) così come altFormat (per l'ingresso che l'utente vede, impostare questo a dd/mm/yyyy).

Altri suggerimenti

Aggiungi un file chiamato rails_defaults.rb a config\initializers directory; con le seguenti linee:

Date::DATE_FORMATS[:default] = '%d/%m/%Y'
Time::DATE_FORMATS[:default]= '%d/%m/%Y %H:%M:%S'

Riavviare il server e si è pronti per partire.

class Date
  class << self
    def _parse_with_us_format(date, *args)
      if date =~ %r{^(\d+)/(\d+)/(\d+)$}
        _parse_without_us_format("#{$3.length == 2 ? "20#{$3}" : $3}-#{$1}-#{$2}", *args)
      else
        _parse_without_us_format(date, *args)
      end
    end
    alias_method_chain :_parse, :us_format
  end
end
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top