Попытка форматировать дату на шаблон нефрита

У меня есть index.js:

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

И на моем шаблоне нефрита:

tr
    td #{currentCourses[0].start}

Какая дата, отформатированная как "Sun Sep 29 2013 00:00:00 GMT + 0100 (BST)".

Как я могу отформатировать его до "29 сентября 2013 года"?

Изменить (после комментариев Эда Хинчлиффа):

-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)}

Ответы

Ответ 1

К сожалению, не особо легко. Вам понадобится функция для форматирования строки либо внутри вашего шаблона, либо снаружи (и передать красивую строку).

Что-то вроде этого (JADE)

-function prettyDate(dateString){
    //if it 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)}

Ответ 2

Мое решение:

Добавьте momentjs своим местным экспресс-приложениям следующим образом:
app.locals.moment = require('moment');

Затем вы можете использовать момент в любых нефритовых файлах:
span='(Created at: ' + moment(obj.createTime).format("YYYY/MM/DD") + ')'

Справка:
Использование библиотек служебных программ в серверных Jade-шаблонах

Ответ 3

Вышеупомянутое решение от Zhifeng Hu дало мне правильное направление. К сожалению, app.locals.moment не работал у меня.

Но вы можете передать require('moment') также непосредственно в объект для атрибутов шаблона.

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

И затем передайте объект данных, как обычно, в функцию шаблона.

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

Пример исходного файла:

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

Ответ 4

Вы должны отформатировать дату на стороне сервера. Ограничьте количество логики, выполненное внутри шаблона, до минимума - в идеале ничего нет.