web-dev-qa-db-fra.com

Mettre en forme une date depuis l'intérieur d'un modèle de guidon dans Meteor

J'ai obtenu une date au format ISO à partir de mes données et ce que je veux réellement faire, c'est modifier mon format de date directement à partir de mes modèles.

comme ça:

{{format my.context.date "myFormat"}}

J'utilise la bibliothèque moment, donc je pourrais écrire quelque chose comme ceci:

{{formatDate my.context.date "DD.MM.YYYY HH:mm"}} // 03.09.2013 18:12

Ce serait bien, car je pense que c'est l'endroit où je devrais pouvoir faire ça. Dans mon modèle.

33
Boris Kotov

La solution est assez simple, et peut-être que quelqu'un la trouvera utile. Dans la plupart des projets, vous souhaitez utiliser plusieurs formats de date. C'est donc une bonne approche pour définir vos formats avec des noms lisibles.

Pour cet exemple, j'ai pris juste "court" et "long", mais vous verrez, c'est très facile à étendre.

J'ai donc créé un objet dans mon script client:

var DateFormats = {
       short: "DD MMMM - YYYY",
       long: "dddd DD.MM.YYYY HH:mm"
};

J'ai également créé un assistant de guidon "formatDate".

Modifié: vous devez maintenant utiliser l'interface utilisateur au lieu des guidons

// Deprecated since version 0.8.0 
Handlebars.registerHelper("formatDate", function(datetime, format) {

// Use UI.registerHelper..
UI.registerHelper("formatDate", function(datetime, format) {
  if (moment) {
    // can use other formats like 'lll' too
    format = DateFormats[format] || format;
    return moment(datetime).format(format);
  }
  else {
    return datetime;
  }
});

Comme vous pouvez le voir, j'utilise la lib moment.js dans mon Helper. Pour l'installer, tapez simplement meteor add momentjs:moment depuis votre ligne de commande.

Et maintenant, partout dans mes modèles, je peux l'utiliser avec les deux paramètres, comme ceci:

{{formatDate MyISOString "short"}} // 02 September - 2013
{{formatDate MyISOString "long"}} //  Monday 02.09.2013 18:00

Si vous souhaitez créer vos propres formats, jetez un œil aux documents momentjs http://momentjs.com/docs/

Bon codage!

90
Boris Kotov