我有一个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)”。
如何将其格式化为“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)}
答案 0 :(得分:56)
我的解决方案是:
将momentjs添加到您的快速应用程序本地,如下所示:
app.locals.moment = require('moment');
然后你可以在任何玉器文件中使用时刻:
span='(Created at: ' + moment(obj.createTime).format("YYYY/MM/DD") + ')'
参考:
Making use of utility libraries in server-side Jade templates
答案 1 :(得分:10)
不幸的是,并不是特别容易。您需要一个函数来在模板内部或外部格式化字符串(并传递漂亮的字符串)。
像这样(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)}
答案 2 :(得分:4)
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')
答案 3 :(得分:1)
我喜欢采用类似于@Zhifeng Hu的方法,但是不需要将所有内容都输入本地,而是只要求“ require”,然后可以根据需要在模板中提取内容。
app.use((req, res, next) => { res.locals.require = require; next() })
然后在Jade / Pug中
- const moment = require('moment')
div Created at: #{moment(data.createdAt).fromNow()}
基本上是一样的东西,但是我可以将require代码保留在使用它的模板中。
答案 4 :(得分:-3)
您应格式化日期服务器端。将模板内部完成的逻辑数量限制在最低限度 - 理想情况下完全没有。