2017-04-20 149 views
0

我有一个数据库posts。对于每个post,我想保存不同用户的最后打开时间。因此,我决定在后端保存绝对时间(即moment())并在前端显示相关时间(即,通过fromNow(),例如2 days ago)。在后台记录绝对时间并在前端显示相关时间

在后端:

var PostSchema = new mongoose.Schema({ 
    ... ... 
    lastOpens: { type: Array, default: [] }, 
}); 

PostSchema.methods.updateLastOpens = function (userId, cb) { 
    ... ... 
    this.lastOpens.push({ time: moment(), userId: userId }); 
}; 

在前端:

alert(JSON.stringify(post.lastOpens[j].time)) 
var x = post.lastOpens[0].time.fromNow() 

然而,在前端的第一行显示了很长的对象{"_isValid":true,"_d":"2017-04-20T02:42:50.932Z","_locale":{"_dayOfMonthOrdinalParseLenient":{},...。第二个像TypeError: post.lastOpens[0].time.fromNow is not a function

有谁知道哪里错了,怎么做到这一点?

+0

你推moment.js对象到数组,然后字符串化了,所以你看到的是串化的时刻对象,而不是日期。你应该推''time:moment()。fomat('YYYY-MM-DD'),...}或类似的。 – RobG

+0

我在'alert()'中进行了字符串化处理,但没有在'var x = post.lastOpens [0] .time.fromNow()'中进行处理。 – SoftTimur

+0

是的,但是你应该考虑的是后端将序列化对象,因此你看到的是长Json,并将它发送到前端。当它到达前端时,它不再是一个时刻对象。它是一个普通的json对象,它有数据但没有方法。我会从前端的.time内容重新创建时刻(),然后重试代码。 – Reza

回答

0

您从后端获得的数据可能不是moment object。因此你无法致电fromNow功能。要调用fromNow,您可以将数据转换为一个时刻对象由moment constructor通过_d,然后调用fromNow该对象在这样

var x = moment(post.lastOpens[j].time._d).fromNow() 
相关问题