android - Mongoose 时间戳和纪元转换为 Date() 的问题

标签 android node.js mongodb date mongoose

我有一个将 timestamp 选项设置为 true 的 Mongoose 模式。

schema = new mongoose.Schema({
    ...
},
{ timestamps: true });

现在我有一个 Android 应用程序,它使用 System.currentTimeMillis() 获取时间戳,它工作得很好,并且给出了自 UNIX 纪元时间以来的毫秒数。

我将此数据发送到我的 Node.js/Express 服务器,这需要时间并仅返回在该特定日期之后创建的文档。

// get all docs
router.get('/api/seekers', function(req, res) {
    Seeker.find({createdAt:{ $gt: new Date(req.query.timestamp) }}, function(err, seekers) {
        if(err)
            res.send(err);
        else 
            res.json(seekers);
    });
});

所以我将 https://api_url.com/api/seekers?timestamp=1479431351762 作为请求发送到服务器。

现在发生了一些事情:

  1. 我以毫秒为单位发送值并收到此错误

    {"message":"Cast to date failed for value\"Invalid Date\"at path\"updatedAt\"","name":"CastError","kind":"date","value":null,"path":"updatedAt"}

    经过一些调查,发现您需要将秒数传递给 Date()。所以,

  2. 我将该值除以 1000 得到秒数 (req.query.timestamp/1000)。现在我没有收到错误,但查询约束不起作用。我从一开始就获得了所有值(value)。

  3. 我转移到 Mongo shell 来检查问题是否仍然存在,事实证明它没有,因为我可以将毫秒值传递给 Mongo 的日期:

    > 新日期(1479431351762) ISODate("2016-11-18T01:09:11.762Z")

    但如果我尝试将第二个值传递给 Date(),结果实际上是将我发送到时间的开始:

    > 新日期(1479431351) ISODate("1970-01-18T02:57:11.351Z")

我无法弄清楚,我该怎么做才能让服务器请求和 mongoose 正确处理时间戳并查询我的数据库?

最佳答案

有同样问题的游子,可能错过了chridam的评论,你只需要在解析之前将传递的时间戳转换为 int 。这有效:

新日期(parseInt(req.query.timestamp))

关于android - Mongoose 时间戳和纪元转换为 Date() 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40679972/

相关文章:

node.js - 使用模式方法在 Mongoose For 循环中保存项目

javascript - NeDB 查询存在投影语法错误

Android NDK 链接时间

java - 如何从左侧动画 ImageView 以填充屏幕?

android - OnLocationChanged 在许多设备上不再工作

android - SmsManager 执行了几次

javascript - 使用 Sequelize 将字节数组插入 MySQL VARBINARY 列

node.js - Node : no response to NPM install

javascript - Socket.io 向房间广播在 socket.io v.0.9.13 中不起作用

ruby-on-rails - Rails Mongoid 无法验证 - 失败并出现错误 13 : "not authorized for query on my_db.my_collection"