展示自发布以来的时间

时间:2018-02-19 14:43:32

标签: javascript node.js express ejs

我正在为我的家庭实验室制作状态页面项目。我想能够做一段时间,因为状态更新有时间,然后用户的系统占用当前服务器时间并计算出我发送的时间。

到目前为止,我只有创建新状态然后显示路线的路线。

新状态路线

router.post("/status/new", middleware.isLoggedIn, (req, res) => {
    var type = req.body.type;
    var message = req.body.message;
    var date = new Date();
    var author = {
        id: req.user._id,
        username: req.user.username
    };
    var newStatus = {type:type, message:message, author:author, date:date};
    Status.create(newStatus, function(err, newlyCreated){
        if(err){
            throw(err);
        } else {
            //redirect back to new status page
            res.redirect("/admin/status/new");
        }
    });

});

显示状态路线

//root route
router.get("/", function(req, res){
    Status.find({}, function(err, allStatuses){
   if(err){
       console.log(err);
   } else {

       var second = 1000,
       minute = 1000 * 60,
       hour = minute * 60,
       day = hour * 24,
       year = day * 365,
       time = Date.now();

       var diff = time - allStatuses[0].date,
       seconds = Math.round(diff / second),
       minutes = Math.round(diff / minute),
       hours = Math.round(diff / hour),
       days = Math.round(diff / day),
       years = Math.round(diff / year);

       console.log("Difference: " + diff);
       if (diff < 1 * minute) {
           console.log(seconds + " seconds ago");
       }
       if (diff > 1 * minute && diff < 1 * hour) {
           console.log(minutes + " minutes ago");
       }
       if (diff > 1 * hour && diff < 1 * day) {
           console.log(hours + " hours ago");
       }
       if (diff > 1 * day && diff < 1 * year) {
           console.log(days + " days ago");
       }
       if (diff > 1 * year) {
           console.log(years + " years ago");
       }


      res.render("index", {statuses:allStatuses});
   }
 });
});

我使用的第一行EJS阵列代码

<% statuses.forEach(function(status){ %>

之前我曾经使用过moment.js但从来没有使用过像这样的东西。我甚至不确定如何解决这个问题。欢迎任何指导或建议。我似乎无法得到任何比较工作。我想我需要花费当前时间,减去创建时间然后计算提醒并计算出秒,分,小时,天,周,月和年。

我似乎可以弄清楚如何做Date.now()然后将其保存到数据库,然后在页面加载时执行Date.now()并得出毫秒差异,但我不确定如何采取差异我发现,然后传递给我的模板。我知道如何通过数组,但我似乎无法想出一种从查询中获取数组的方法,然后从每个数据中找出时间差异,将其保存在数组中,然后能够循环它在我的模板中,我已经循环遍历查询返回的数组。

我所经历的所有尝试都涉及为每个状态/帖子循环遍历整个差异数组。

1 个答案:

答案 0 :(得分:0)

您可以自己做,也可以使用moment.js

在第一种情况下,使用:

var diff = time.getTime() - allStatuses[0].date.getTime();

这样你就有了几毫秒的时差。然后你可以按照自己的意愿进行格式化。

但随着时间的推移,使用fromNow()方法变得更容易:

var diff = moment(allStatuses[0].date).fromNow();

在这种情况下,diff已经是您需要打印给用户的字符串。

当然,您可能希望在循环中执行此操作,而不仅仅是allStatus [0]。