在后台记录绝对时间并在前端显示相关时间

时间:2017-04-20 03:03:59

标签: javascript momentjs

我有一个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

有谁知道哪里出错了以及如何实现这个目标?

1 个答案:

答案 0 :(得分:0)

您从后端获取的数据可能不是moment object。因此,您无法在其上调用fromNow函数。要调用fromNow,您可以通过在_d中传递moment constructor然后在该对象上调用fromNow来将数据转换为片刻对象

var x = moment(post.lastOpens[j].time._d).fromNow()