与Meteor一起使用moment.js来写日期/小时/月过去

时间:2015-03-18 23:15:37

标签: meteor momentjs

我在Meteor项目中使用http://momentjs.com/docs/#/displaying/fromnow/ ... (包裹:https://atmospherejs.com/mrt/moment

我想写出类似

的内容
  • “用户:jsmith 4年前加入

我必须错过从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}}

确实有效(即已发布)

罗布

1 个答案:

答案 0 :(得分:0)

这可能是一种竞争条件,用户在代码执行时没有登录。解决这个问题的一个好方法就是创建一个帮助器,当用户登录时它将重新运行。但是,在这种情况下,我认为为时刻标记添加通用帮助可能更合适:

Template.registerHelper('fromNow', function(date) {
  if (date)
    return moment(date).fromNow(true);
});

然后在你的模板中你可以这样做:

{{fromNow currentUser.createdAt}}

因为currentUser是被动的,所以这应该是正确的。另请注意,moment([d])并不正确,因为在此示例中dDate对象(不像上一个示例那样的数组文字)。