JeuWeb - Crée ton jeu par navigateur
Rails et les dates - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Rails et les dates (/showthread.php?tid=4923)



Rails et les dates - Thib4s - 19-06-2010

Bonjour à vous,

Bon petit à petit j'avance dans le côté obscur de Rails et je sens le pouvoir déjà monter en moi, néanmoins il n'en reste que mon apprentissage rencontre parfois des problèmes.
Effectivement, aujourd'hui, alors que je viens de terminer mon système de post, je me rend compte d'une chose assez gênante :S

Le format des dates de Rails est tout bonnement dégueulasse, je vous laisse voir le : 2010-06-19 14:45:54 UTC

Est ce que quelqu'un saurait m'aider et me dire comment changer ce format ?

Je suis sous rails3.


RE: Rails et les dates ... - Sephi-Chan - 19-06-2010

Ceci n'est que la chaîne retournée par la méthode to_s des instances de la classe Datetime. Cette méthode est appelé implicitement sur les objets que tu tentes d'afficher (comme toString dans la plupart des langages object).

Pour formatter une date, tu peux utiliser la méthode strftime (string from time, qui existe aussi en PHP sous forme d'une fonction).


puts Time.now.strftime("%d/%m/%Y a %Hh%M") # "19/06/2010 a 18h10"

L'autre solution, meilleure, est d'utiliser le module d'internationalisation de Rails, excellent. En gros, tu écris :


I18n.localize(Time.now)
l(Time.now) # Dans les vues, le helper l() fait appel à I18n.localize, ça permet d'être plus concis.

Et tu peux même définir plusieurs format. Tout est expliqué clairement dans le guide Rails Internationalization (I18n) API. En plus, Sven Fuchs a répertorié contenant les formats pour plein de langues, dont le français !

Voici un petit extrait :


fr:
date:
formats:
default: "%d/%m/%Y"
short: "%e %b"
long: "%e %B %Y"
long_ordinal: "%e %B %Y"
only_day: "%e"

day_names: [dimanche, lundi, mardi, mercredi, jeudi, vendredi, samedi]
abbr_day_names: [dim, lun, mar, mer, jeu, ven, sam]
month_names: [~, janvier, février, mars, avril, mai, juin, juillet, août, septembre, octobre, novembre, décembre]
abbr_month_names: [~, jan., fév., mar., avr., mai, juin, juil., août, sept., oct., nov., déc.]
order: [ :day, :month, :year ]

time:
formats:
default: "%d %B %Y %H:%M"
time: "%H:%M"
short: "%d %b %H:%M"
long: "%A %d %B %Y %H:%M:%S %Z"
long_ordinal: "%A %d %B %Y %H:%M:%S %Z"
only_second: "%S"
am: 'am'
pm: 'pm'

Mais il y a également des réglages pour écrire des choses comme "Il y a environ 12 minutes".


En plus, Rails s'occupe de tout pour toi à stocker des dates en UTC (et les converti selon le timezone configuré par l'application). Il est tout bonnement génial à ce niveau. Il permet d'écrire des trucs comme :


# Récupère les messages écrit il y a 10 jours et plus.
@old_messages = Message.where("created_at < ?", 10.days.ago)

# On définit la date de mort du personnage a 80 ans et 2 semaines (à compter de cet instant).
@character.die_at = (80.years + 2.weeks).from_now

C'est tout de même bien plus sympa que de travailler avec des timestamp Unix. Smile


Sephi-Chan