gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:39:27 25 4
gpt4 key购买 nike

我有一个将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com