试图格式化玉模板上的date

我有一个index.js:

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

在我的玉模板上:

 tr td #{currentCourses[0].start} 

这是一个date,格式为“Sun Sep 2013 2013 00:00:00 GMT + 0100(BST)”。

我怎样才能把它格式化为“2013年9月29日”?

编辑(在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)} 

不幸的是不是特别容易 你需要一个函数来在你的模板里面或者在外面格式化一个string(并且传递漂亮的string)。

像这样的东西(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)} 

我的解决scheme是:

向您的快速应用程序本地人添加momentjs ,如下所示:
app.locals.moment = require('moment');

那么你可以使用任何玉文件的时刻:
span='(Created at: ' + moment(obj.createTime).format("YYYY/MM/DD") + ')'

参考:
在服务器端Jade模板中使用实用程序库

胡志峰的上述解决scheme给了我正确的方向。 不幸的是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') 

你应该格式化date服务器端。 限制在模板内完成的逻辑数量最小 – 理想情况下完全没有。