在javascript中创建ISO日期对象

Joe*_*mes 51 javascript mongodb node.js coffeescript

我有一个mongo数据库设置.在mongoDb中创建一个新的日期对象,以ISO格式创建一个日期对象,例如:ISODate("2012-07-14T00:00:00Z")

我使用node.js连接到mongo数据库并查询数据库.当我new Date()在javascript中创建一个新的日期对象()时,它会创建一个javascript日期对象,例如:Wed Mar 06 2013 14:49:51 GMT-0600 (CST)

有没有办法在javascript中创建ISO日期对象,以便我可以直接将对象发送到mongoDb并执行日期查询

我可以在mongoDb中执行以下查询

db.schedule_collection.find({
  start_date: { '$gte': new Date(2012, 01, 03, 8, 30) }
})
Run Code Online (Sandbox Code Playgroud)

但是当我从节点发送javascript日期对象时无法执行

mongodb cookbook提供了一个使用datetime模块查询mongo数据库的python示例,但没有提供任何使用javascript的示例.

任何帮助表示赞赏.提前感谢你

Mat*_*ics 87

尝试使用ISO字符串

var isodate = new Date().toISOString()
Run Code Online (Sandbox Code Playgroud)

另请参见:MDN上的方法定义.

  • Mongodb驱动程序仅适用于日期对象.我必须承认这个问题有点不清楚.以下答案解决了我的问题:http://stackoverflow.com/questions/21286599/inserting-and-querying-date-with-mongodb-and-nodejs/21286896#21286896 (9认同)
  • 字符串不是对象,所以我猜测我们想要的对象只是 new Date('...') 对象。那么基本上 ISODate(..) 与 new Date(..) 相同吗? (2认同)

小智 10

在节点中,Mongo驱动程序将为您提供ISO字符串,而不是对象.(例如:)Mon Nov 24 2014 01:30:34 GMT-0800 (PST)因此,只需将其转换为js日期:new Date(ISOString);


Abd*_*hin 9

尝试以下:

var temp_datetime_obj = new Date();

collection.find({
    start_date:{
        $gte: new Date(temp_datetime_obj.toISOString())
    }
}).toArray(function(err, items) { 
    /* you can console.log here */ 
});
Run Code Online (Sandbox Code Playgroud)


小智 5

我解决了这个问题,在 node.js 中实例化一个新的 Date 对象:...

在 Javascript 中,将 Date().toISOString() 发送到 nodejs:...

var start_date = new Date(2012, 01, 03, 8, 30);

$.ajax({
    type: 'POST',
    data: { start_date: start_date.toISOString() },
    url: '/queryScheduleCollection',
    dataType: 'JSON'
}).done(function( response ) { ... });
Run Code Online (Sandbox Code Playgroud)

然后使用ISOString在nodejs中创建一个新的Date对象:..

exports.queryScheduleCollection = function(db){
    return function(req, res){

        var start_date = new Date(req.body.start_date);

        db.collection('schedule_collection').find(
            { start_date: { $gte: start_date } }
        ).toArray( function (err,d){
            ...
            res.json(d)
        })
    }
};
Run Code Online (Sandbox Code Playgroud)

注意:我使用的是 Express 和 Mongoskin。


Ade*_*adi 5

这对我有用:

var start = new Date("2020-10-15T00:00:00.000+0000");
 //or
start = new date("2020-10-15T00:00:00.000Z");

collection.find({
    start_date:{
        $gte: start
    }
})...etc
Run Code Online (Sandbox Code Playgroud)
new Date(2020,9,15,0,0,0,0) 可能会导致错误的日期:我的意思是非 ISO 格式(记住 javascript 从 0 到 11 计数月份,所以 10 月是 9)