Попытка форматировать дату на шаблон нефрита
У меня есть 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
Вы должны отформатировать дату на стороне сервера. Ограничьте количество логики, выполненное внутри шаблона, до минимума - в идеале ничего нет.