使用 moment.js 和 Meteor 来写过去的天/小时/月

using moment.js with Meteor to write days / hours / months past

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

我想写出这样的东西

我一定是缺少从 mongoDB 日期到时刻的转换?

json 对象 mongo

{
"_id" : "vWM5Sg67fqxQAzrnv",
"createdAt" : ISODate("2015-03-14T03:39:03.384Z"),
"emails" : [
{... etc.

当我将其输入控制台时

Meteor.user().createdAt;

returns

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);

returns61岁

this **DOESN'T** work

d = Meteor.user().createdAt;
var dd= moment([d]).fromNow(true);
console.log (dd);

returns TypeError: undefined is not an object (evaluating Meteor.user().createdAt')

任何帮助将不胜感激,已经尝试了一段时间..

注意:在我的模板中

{{currentUser.createdAt}}

有效(即已发表)

罗布

这可能是您的代码执行时用户尚未登录的竞争条件。解决这个问题的一个好方法是创建一个帮助程序,它将在用户登录时重新运行。但是,在这种情况下,我认为为时刻时间戳添加一个通用帮助程序可能更合适:

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

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

{{fromNow currentUser.createdAt}}

因为 currentUser 是反应式的,所以这应该是正确的。另请注意 moment([d]) 是不正确的,因为在此示例中 d 是一个 Date 对象(不是像您之前的示例那样的数组文字)。