【问题标题】:Create an ISO date object in javascript在 javascript 中创建一个 ISO 日期对象
【发布时间】:2013-02-21 20:49:14
【问题描述】:

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

我正在使用 node.js 连接到 mongo 数据库并查询数据库。 当我在 javascript 中创建一个新的日期对象 (new Date()) 时,它会创建一个 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) }
})

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

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

感谢任何帮助。 提前谢谢你

【问题讨论】:

  • 如果你使用的是 nodejs,你可以使用 ECMAScript5 中定义的toISOString() 方法。
  • JavaScript Date 对象是您在 MongoDB 中使用的对象。您不需要使用单独的 ISODate 类型。你能举一个不起作用的具体例子吗?

标签: javascript node.js mongodb coffeescript


【解决方案1】:

尝试使用the ISO string

var isodate = new Date().toISOString()

另请参阅:method definition at MDN

【讨论】:

  • Mongodb 驱动只适用于日期对象。我必须承认这个问题有点不清楚。以下答案解决了我的问题:stackoverflow.com/questions/21286599/…
  • 字符串不是对象,所以我猜我们想要的对象只是新的 Date('...') 对象。所以基本上 ISODate(..) 和 new Date(..) 是一样的?
  • 我发现使用这种方法,日期是日期字符串而不是ISODate对象。我的意思是: [var isodate = new Date().toISOString()] => ["time" : "2018-03-08T08:15:15.919Z"] 而 [var isodate = new Date(new Date( ).toISOString())] => ["时间" : ISODate("2018-03-08T08:15:16.097Z") ]
  • 这会将输入转换为字符串。现在我不能用这个字段进行聚合。
【解决方案2】:

试试下面:

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 */ 
});

【讨论】:

  • 有效!将toISOString() 输出包装在new Date() 中就可以了。
【解决方案3】:

在节点中,Mongo 驱动程序会给你一个 ISO 字符串,而不是对象。 (例如:Mon Nov 24 2014 01:30:34 GMT-0800 (PST))所以,只需将其转换为 js 日期:new Date(ISOString);

【讨论】:

  • 经过 3 个小时的长时间搜索,我找到了这个解决方案。没有时刻 Js,没有 ISO 转换,什么都没有。
  • ^^ 谢谢,mongodb 期待 Date 对象。
【解决方案4】:

这对我有用:

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
new Date(2020,9,15,0,0,0,0) 可能导致错误的日期:我的意思是非 ISO 格式 (记住 javascript 从 0 到 11 计算月份,所以 10 月份是 9)

【讨论】:

    【解决方案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 ) { ... });
    

    然后使用 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)
            })
        }
    };
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-12
      • 1970-01-01
      • 1970-01-01
      • 2021-02-14
      相关资源
      最近更新 更多