###model 处理分页代码
Mcontact.getTen = function(mcname,page,callback) {
var query = {};
if (mcname) {
query.mcname = mcname;
}
//使用 count 返回特定查询的文档数 total
mcontactModel.count(query, function (err, total) {
//根据 query 对象查询,并跳过前 (page-1)*10 个结果,返回之后的 10 个结果
//sort({create_at: -1}).
mcontactModel.find(query).skip((page - 1)*10).limit(10).exec(function (err, docs) {
if (err) {
return callback(err);
}
docs.forEach(function(doc) {
// item 对应每条记录
doc.create_at = moment(doc.create_at).format('YYYY MM DD');
doc.update_at = moment(doc.update_at).format('YYYY/MM/DD');
})
console.log('docs:'+docs);
callback(null, docs, total);
});
});
};
###控制层调用代码
router.get('/', function(req, res) {
//判断是否是第一页,并把请求的页数转换成 number 类型
var page = req.query.p ? parseInt(req.query.p) : 1;
//查询并返回第 page 页的 10 篇文章
Mcontact.getTen(null, page, function (err, mcontacts, total) {
if (err) {
mcontacts = [];
}
res.render('mcontact', {
mcontacts: mcontacts,
page: page,
isFirstPage: (page - 1) == 0,
isLastPage: ((page - 1) * 10 + mcontacts.length) == total,
user: req.session.user,
success: req.flash('success').toString(),
error: req.flash('error').toString()
});
});
});
###EJS 显示
<% mcontacts.forEach(function (mcontact, index) { %>
<tr class="">
<td class="inbox-small-cells">
<input type="checkbox" class="mail-checkbox">
</td>
<td class="view-message "><%=mcontact.mcname%><span class="label label-danger pull-right"><%=mcontact.tag%></span></td>
<td class="view-message "><%=mcontact.mcemail%></td>
<td class="view-message "><%=mcontact.mcpassword%></td>
<td class="view-message dont-show"><%=mcontact.create_at%></td>
<td class="view-message dont-show"><%=mcontact.update_at%></td>
</tr>
<% }) %>
###最终结果
网页啊 abbc[@sina](/user/sina).com 123123 Tue Jul 08 2014 00:00:00 GMT+0800 (中国标准时间) Tue Jul 08 2014 00:00:00 GMT+0800 (中国标准时间)
行吗 xingma[@qq](/user/qq).com qweqweqwe Tue Jul 08 2014 00:00:00 GMT+0800 (中国标准时间) Tue Jul 08 2014 00:00:00 GMT+0800 (中国标准时间)
行啊 ok[@ok](/user/ok).com qweqweqwe Tue Jul 08 2014 00:00:00 GMT+0800 (中国标准时间) Tue Jul 08 2014 00:00:00 GMT+0800 (中国标准时间)
好了吗 ho[@hotmail](/user/hotmail).com qweqweqwe Tue Jul 08 2014 00:00:00 GMT+0800 (中国标准时间) Tue Jul 08 2014 00:00:00 GMT+0800 (中国标准时间)
##为什么格式化没有效果啊。我叉,到底是哪里出了问题?求大神指点啊 解决方法:
docs.forEach(function(doc) {
// item 对应每条记录
doc.create_at_string = moment(doc.create_at).format('YYYY-MM-DD');
doc.update_at_string = moment(doc.update_at).format('YYYY-MM-DD');
// doc.update_at = moment(doc.update_at).format('YYYY-MM-DD');
/***原理无论你怎么格式化,doc.update_at这个逗比都是日期格式,
所以你怎么变它都会给你整成ISO-1的日期,经过3楼的大神一说,仔细一想确实啊。
昨晚被这个折磨了接近4个小时。资料少的可怜。
***/
})
EJS引用 <td class=“view-message dont-show”><%=mcontact.create_at_string%></td>
//加个lean试试 mcontactModel.find(query).skip((page - 1)*10).limit(10) .lean().exec(function (err, docs) {})
没有这个方法
console.log(moment(doc.create_at).format(‘YYYY MM DD’))你看看是什么吧;
我遇到过这个问题,你callback里的参数mcontacts 是mongoose或者类似数据库访问组件直接返回的类型吧??这些类型的create_at属性其实是个function,你传递日期字符串,它又会给你转换成Date类型.
我的做法是, doc.create_at_string = moment(doc.create_at).format(‘YYYY MM DD’);
console.log(‘doc.create_at:Mon Jul 07 2014 00:00:00 GMT+0800 (中国标准时间) doc.update_at:Mon Jul 07 2014 00:00:00 GMT+0800 (中国标准时间) doc.create_at:Tue Jul 08 2014 00:00:00 GMT+0800 (中国标准时间) doc.update_at:Tue Jul 08 2014 00:00:00 GMT+0800 (中国标准时间) doc.create_at:Tue Jul 08 2014 00:00:00 GMT+0800 (中国标准时间) doc.update_at:Tue Jul 08 2014 00:00:00 GMT+0800 (中国标准时间) doc.create_at:Tue Jul 08 2014 00:00:00 GMT+0800 (中国标准时间) doc.update_at:Tue Jul 08 2014 00:00:00 GMT+0800 (中国标准时间) doc.create_at:Tue Jul 08 2014 00:00:00 GMT+0800 (中国标准时间) doc.update_at:Tue Jul 08 2014 00:00:00 GMT+0800 (中国标准时间) doc.create_at:Tue Jul 08 2014 00:00:00 GMT+0800 (中国标准时间) doc.update_at:Tue Jul 08 2014 00:00:00 GMT+0800 (中国标准时间) ’)
mcontactModel.find(query).skip((page - 1)*10).limit(10).exec(function (err, docs) {
if (err) {
return callback(err);
}
docs.forEach(function(doc) {
// item 对应每条记录
y=moment(doc.create_at).format('YYYY');
m=moment(doc.create_at).format('MM');
d=moment(doc.create_at).format('DD');
uy=moment(doc.update_at).format('YYYY');
um=moment(doc.update_at).format('MM');
ud=moment(doc.update_at).format('DD');
doc.create_at =y+'.'+m+'.'+d; //moment(doc.create_at).format();
doc.update_at =uy+'.'+um+'.'+ud;
console.log('doc.create_at:'+doc.create_at);
console.log('doc.update_at:'+doc.update_at);
// console.log('doc.create_at:'+doc.create_at+',doc.update_at'+doc.update_at
// +",moment(doc.update_at).format('YYYY'):"+moment(doc.update_at).format('YYYY')
// +",moment(doc.update_at).format('DD'):"+moment(doc.update_at).format('MM')
// +"moment(doc.update_at).format('DD'):"+moment(doc.update_at).format('DD'));
})
console.log('docs:'+docs);
callback(null, docs, total);
});
});
是的。无论我怎么格式化它,就像上面我都用字符串拼接了。它还是显示那破玩意了。
感谢啊。我昨晚折腾到4点才睡。还是没搞定,查了很多网站,发现资料真TM少的可怜。今天你一说终于解决了。万分感谢啊。
我也遇到了这个问题。
一开始解决思路也是考虑从mongoose的检索或者是检索结果的foreach来解决,尝试各种方法无效。
最后,索性直接在模板端(Jade/EJS)中:
| <td class="view-message dont-show"><%=mcontact.create_at%></td>
这个位置嵌入js代码进行日期的格式化。
可以试试我这个方法。
@heixiaoshan 我反而更推荐我的方法。在dao层进行日期格式化感觉不太符合MVC。以后处理不同时区的显示等问题,也应该是放在模板或者前端js来处理,所以后端传基本日期形式是可以接受的。
@heixiaoshan 你确定用的mongoose吗?http://mongoosejs.com/docs/api.html#query_Query-lean
@kakanjau 并不是在后台保存的时候去处理。是在传到前台来的时候进行转换,页面上直接标签就可以取了。
试试先 toObject() 然后再修改。 或者给 ejs 加 filters,输出时格式化。 ejs.filters.formatdate = util.formatdate; <%= item.create_at | formatdate %>