Parsing des dates françaises


#1

Salut à tous,

Je n’arrive pas à trouver un moyen pour que rails parse des dates au
format
européen.
En fait je voudrais que “22/12/2008”.to_date me renvoie bien le 22
décembre
2008.

Une idée ?
Merci

Emmanuel


#2

Salut à tous,

Je n’arrive pas à trouver un moyen pour que rails parse des dates au format
européen.
En fait je voudrais que “22/12/2008”.to_date me renvoie bien le 22 décembre
2008.

Une idée ?
Merci

Voici la solution utilisée par zena:
http://github.com/zena/zena/tree/59dac1392647c1a509b7faabd8d55734db9c27d6/lib/core_ext/string.rb#L14

“22/12/2008”.to_utc("%d/%m/%Y")

Gaspard


#3

Tu peux essayer ceci :

Date.parse(“2008-12-22”)

Salim


#4

Merci pour la réponse.
En fait je me rend compte que j’ai mal expliqué mon problème, désolé.
Ce que je voudrais, c’est que dans un form_for, mes champs de type date
soient saisies au format jj/mm/aaaa (via un datepicker javascript), et
que
rails les interprète correctement. J’ai l’impression qu’il doit falloir
surcharger la fonction _parse de ruby (format.rb) car elle est appelée
par
le to_date de ActiveSupport (et to_datetime également) … mais bon ça
me
parait un peu trash, et je me dis que rails avait peut être déjà prévu
le
coup ???

Merci
a+

Manu

Le 18 novembre 2008 07:58, Gaspard B. removed_email_address@domain.invalid a écrit :


#5

Excellent … Merci !

En fait, je n’ai pas vraiment procédé comme tu me l’as décris mais tu
m’as
mis sur la voie (j’espère que c’est la bonne …).

Pour la fonction to_utc, j’ai mis plutôt celle-ci :

config/initializers/string.rb

class String
def to_utc(format)
Date.strptime(self,
ActiveSupport::CoreExtensions::date::Conversions::DATE_FORMATS[format]).to_s(:utc)
rescue
self
end
end

config/initializers/date_formats.rb

ActiveSupport::CoreExtensions::date::Conversions::DATE_FORMATS.merge!(
:european => ‘%d/%m/%Y’
)

Ta fonction to_utc est-elle plus performante (et/ou plus propre) ?

Ensuite j’ai ajouté à mon model un attribut “alternatif” pour ma date :

my_model.rb

class MyModel < ActiveRecord::Base
def ends_at_formatted
self.ends_at.strftime
ActiveSupport::CoreExtensions::date::Conversions::DATE_FORMATS[:european]
unless self.ends_at.blank?
end

def ends_at_formatted=(value)
self.ends_at = value.to_utc(:european)
end
end

Du coup j’utilise cet attribut au lieu de la vrai date dans ma vue et ça
marche nickel.

Merci encore
a+

Emmanuel

Le 18 novembre 2008 22:53, Gaspard B. removed_email_address@domain.invalid a écrit :


#6

Dans ton contrôleur qui reçoit les données, tu transformes les dates
avant de les envoyer dans le modèle avec une méthode genre “to_utc”
comme
http://github.com/zena/zena/tree/59dac1392647c1a509b7faabd8d55734db9c27d6/lib/core_ext/string.rb#L14

par exemple:

params[:page][:date] = params[:page][:date].to_utc("%d/%m/%Y")
Page.create(params[:page])

gaspard
2008/11/18 Emmanuel B. removed_email_address@domain.invalid:


#7

Ma fonction permet de parser les heures (datetime).

2008/11/19 Emmanuel B. removed_email_address@domain.invalid: