我在Meteor项目中使用http://momentjs.com/docs/#/displaying/fromnow/ ... (包裹:https://atmospherejs.com/mrt/moment)
我想写出类似
的内容我必须错过从mongoDB日期转换到片刻的时间吗?
json object mongo
{
"_id" : "vWM5Sg67fqxQAzrnv",
"createdAt" : ISODate("2015-03-14T03:39:03.384Z"),
"emails" : [
{... etc.
当我将其输入控制台
时Meteor.user().createdAt;
返回
Mon Mar 16 2015 14:11:54 GMT-0400 (EDT)
在我的test.js文件中 这工作
var d= new Date('2011-04-11')
var dd= moment(d).format('MM/DD/YYYY');
console.log (dd); // returns 04/10/2011
这是有效的
var dd = moment([1954, 5, 8]).fromNow(true); // 4 years
console.log (dd);
返回61年
this **DOESN'T** work
d = Meteor.user().createdAt;
var dd= moment([d]).fromNow(true);
console.log (dd);
返回TypeError:undefined不是对象(评估 Meteor.user()。createdAt')
任何帮助都会受到赞赏,尝试了一段时间..
注意:在我的模板中
{{currentUser.createdAt}}
确实有效(即已发布)
罗布
答案 0 :(得分:0)
这可能是一种竞争条件,用户在代码执行时没有登录。解决这个问题的一个好方法就是创建一个帮助器,当用户登录时它将重新运行。但是,在这种情况下,我认为为时刻标记添加通用帮助可能更合适:
Template.registerHelper('fromNow', function(date) {
if (date)
return moment(date).fromNow(true);
});
然后在你的模板中你可以这样做:
{{fromNow currentUser.createdAt}}
因为currentUser
是被动的,所以这应该是正确的。另请注意,moment([d])
并不正确,因为在此示例中d
是Date
对象(不像上一个示例那样的数组文字)。