web-dev-qa-db-fra.com

essayer de formater une date sur un modèle de jade

J'ai un index.js:

exports.index = function(req, res){
  db.courses.find(function(err, currentCourses) {
    res.render('index', {
      currentCourses: currentCourses
    });
  });
};

Et sur mon modèle de jade:

tr
    td #{currentCourses[0].start}

Ce qui est une date, au format "Sun Sep 29 2013 00:00:00 GMT + 0100 (BST)".

Comment puis-je le formater pour "29 septembre 2013"?

Edit (après les commentaires d'Ed Hinchliffe): 

-function prettyDate(dateString){
    -var d = date.getDate(dateString);
    -var monthNames = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ];
    -var m = monthNames[date.getMonth()];
    -var y = date.getFullYear();
    -return d+' '+m+' '+y;
-} 
for course in currentCourses
    tr
        td #{prettyDate(course.start)}
17
babbaggeii

Pas particulièrement facile malheureusement. Vous aurez besoin d’une fonction pour formater une chaîne à l’intérieur de votre modèle ou à l’extérieur (et transmettre la jolie chaîne).

Quelque chose comme ça (JADE)

-function prettyDate(dateString){
    //if it's already a date object and not a string you don't need this line:
    -var date = new Date(dateString);
    -var d = date.getDate();
    -var monthNames = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ];
    -var m = monthNames[date.getMonth()];
    -var y = date.getFullYear();
    -return d+' '+m+' '+y;
-}


tr
   td #{prettyDate(currentCourses[0].start)}
10
Ed Hinchliffe

La solution ci-dessus de Zhifeng Hu m'a donné la bonne direction. Malheureusement, app.locals.moment n'a pas fonctionné pour moi.

Mais vous pouvez également transmettre la fonction require('moment') directement dans l'objet des attributs de modèle.

var data = {
  title: 'some Nice title',
  updateDate: new Date(),
  ....,
  moment: require( 'moment' )
};

Et puis passez l'objet de données comme d'habitude à la fonction template.

var template = pug.compile( source );
var html = template( data );

Exemple de fichier source:

doctype html
html
  head
    title= title
  body
    div= moment(updateDate).format('YYYY-MM-DD')
3
morecore