javascript - (moment.js) 格式化从 mongo 检索的日期

标签 javascript node.js mongodb mongoose momentjs

有没有办法在我检索它们后格式化存储在 mongoDB 中的日期对象?

我尝试了(已更新)

tests.find({}, {roomId: 1, teacher: 1, created: 1}, function(err, result) {
            if (err) {console.log(err);}
            result = result.map(function (doc) {
                console.dir(typeof doc.created);
                console.dir(doc.created);
                doc.created = doc.created.format("MM.DD.YYYY");
                return doc;
            });

            res.render('showTests', {tests: result});
        });

但是无法读取未定义的属性“格式” (这很奇怪,因为在 Jade 中

each test in tests
    p.col-md-3 #{test.roomId}
    p.col-md-3 #{test.teacher}
    p.col-md-3 #{test.created}

“正确”打印日期(作为一英里长的字符串)。)

我也尝试过直接在jade中添加格式,但这也不起作用。

我必须存储已经格式化的文件吗?这不是唯一的解决方案吗?

控制台输出(已更新)

'object'
Tue Feb 02 2016 20:58:36 GMT+0100 (Mitteleuropäische Zeit)
f:\Dropbox\Projects\calc\routes\test.js:47
                doc.created = doc.created.format("MM.DD.YYYY");
                                          ^

TypeError: doc.created.format is not a function

如果我注释掉 .format() 行,它就会起作用并在模板中显示日期

这是我生成日期(更新)的方法:

var testResults = {

    addRoom: function(Id, teacher) {  // room pseudoconstructor

        this[Id] = {

            Id: Id,
            teacher: teacher,
            created: moment(),
            // ...

        }
}


    // ...
    var created = testResults[room].created;
    var students = testResults[room].students;
    var problems = testResults[room].testProblems;

 // save to DB
            var test = new tests({
                roomId      : room,
                created     : created,
                teacher     : name,
                students    : students,
                problems    : problems
            });

            test.save(function(err, result) {
                if (err) {console.log(err);}
                else {
                    console.log('test saved to DB');
                    socket.emit('testSaved');
                }
            });

答案:

https://coderwall.com/p/egh53a/making-use-of-utility-libraries-in-server-side-jade-templates

最佳答案

您正在尝试格式化文档集合。 您必须循环处理结果,然后为每个文档设置其日期格式,然后再将其传递到模板。

例如

var moment = require('moment');
result = result.map(function (doc) {
    doc.created = moment(doc.created).format("DD.MM. h:mm");
    return doc;
});

关于javascript - (moment.js) 格式化从 mongo 检索的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35164616/

相关文章:

javascript - 只对CSS类下的一个按钮执行点击事件

javascript - 我们有好的 javascript 调试器吗?

Javascript 帮助菜单

mongodb - 按Mongo嵌套数组中文档的值排序

node.js - 如何将MongoDB数据库从cloud9导出到mlab?

php - 从 PHP 传递到 JS 函数的变量计算 <p> 的值,但不计算 <video> 源的值

android - 我应该从客户端发送并行请求,还是发送一个请求并在服务器上并行执行它们?

node.js - Skrill Quick Checkout 中的 MSID 生成

node.js - 在nodejs中使用全局变量有多糟糕?

mongodb - 为MongoDb复制集创建ElasticSearch河