无法用moment.js覆盖日期

时间:2016-04-01 11:30:59

标签: javascript node.js mongodb pug momentjs

我有一系列活动和MongoDB。活动也有约会。我试图动态构建一个包含我的集合中保存的所有活动的表。因此,我想在将JSON对象数组发送到我的jade文件之前用moment.js更改日期的格式。

我尝试创建一个新的结果数组并将其发送到我的jade文件。

    router.get('/', function(req, res, next) {
      activitiesController.getActivities(function(results) {
        if(!results) {
          results = [];
        }
        for(var key in results) {
          results[key].date = moment(results[key].date).format('ddd, hA');
        }
        res.render('index', {
          activities: results
        })
      });
    });

这是结果数组的外观:

[{
    "_id" : ObjectId("56fe2c0d7afcafa412ae19c2"),
    "title" : "Fitnessstudios",
    "category" : "Sport",
    "time" : 2,
    "date" : ISODate("2016-03-30T00:00:00.000Z"),
    "__v" : 0
}]

2 个答案:

答案 0 :(得分:1)

您的问题是您传递给moment.js的值是:

ISODate("2016-03-30T00:00:00.000Z")

当它只需要日期字符串部分时:

"2016-03-30T00:00:00.000Z"

因此,只需获取日期字符串并传递它,下面的代码段显示了如何执行此操作。



var dateString = 'ISODate("2016-03-30T00:00:00.000Z")'.replace(/^[^\"]+\"([^\"]+)\".*$/,'$1');

document.write(dateString);




moment.js很可能在没有进一步帮助的情况下解析ISO字符串就好了,不过我认为告诉它格式要好得多,所以你应该使用类似的东西:

var dateString = results[key].date.replace(/^[^\"]+\"([^\"]+)\".*$/,'$1');
results[key].date = moment(dateString,'YYYY-MM-DDThh:mm:ss.sssZ').format('ddd, hA');

// Wed, 10AM

并且您不应该在数组上使用 for..in ,您可能会找到除您期望的属性以外的其他属性。使用普通的用于,而循环或其中一种循环方法,如 forEach map 等等。

答案 1 :(得分:0)

改变这个:

moment(results[key].date).format('ddd, hA');

moment(new Date(results[key].date.toString()),moment.ISO_8601).format('ddd, hA');