【问题标题】:timestamp choices for ios and mongodb, moment.jsios 和 mongodb、moment.js 的时间戳选择
【发布时间】:2014-10-13 15:49:52
【问题描述】:

各位, 我应该使用哪个来存储时间戳?我目前正在编写一个 API 服务,它将时间戳存储在 MongoDB 中。这些时间戳对我来说很重要,因为我需要在时间范围内查询数据库......即返回过去一小时内或某些日期之间存储的所有文档。

IOS 应用向我发送ISO8601 中具有以下时间戳的对象:

2014-10-09T18:00:48+01:00

如果我将这些直接存储到 mongo 中,文档如下所示:

{
    "_id" : "2B6127C1-4E25-4271-B5A4-2CA9FEA4E1C3",
    "timestamp" : "2014-10-09T18:00:48+01:00"
}

我可以轻松地将它插入 mongo,但在我看来我应该这样做 object.timestamp = moment(object.created).toDate();

这会产生:

2014-10-09T18:00:48+01:00

文件在 mongo 中看起来像这样:

{
    "_id" : "2B6127C1-4E25-4271-B5A4-2CA9FEA4E1C3",
    "timestamp" : ISODate("2014-10-09T13:00:48.000-04:00")
}

我应该将这些转换为 unix epoch 格式吗?我不太了解 ISO 时间戳格式的差异...我认为在第一个示例中,IOS 向我发送了 ISO8601 格式时间戳。这是行业标准吗?

我已经阅读了几个线程,包括 Best way to store date/time in mongodb ,在我看来,我正在正确的轨道上将我从 ios 获得的 timestamp 转换为原生 javascript 日期对象。

当用户检索这些对象时,我是否应该将这个存储的对象转换为ISO8601 格式?

【问题讨论】:

    标签: ios node.js time momentjs


    【解决方案1】:

    以最原生的格式存储可以让您使用更多原生功能。 Mongo 的查询或聚合 API 可以使用带有原生日期的 $gt$lte。这对于查询非常方便。用“代表日期的字符串”来做这些类型的事情要困难得多。

    从 1970 年开始以毫秒为单位进行存储,或其他任何时间,工作方式相同,但由于 ISODate 是 Mongo 识别的类型,请使用它。

    另外,moment.js 也是不错的选择。这是一个有趣的库,它可以让您选择向客户展示的任何内容都隐藏在数据的存储方式中(这就是您想要的方式......)。

    【讨论】:

    • 完美!在出去的路上,我会将时间戳转换为iso8601 for ios :)
    • 我在将本地时间戳转换为 utc 时间戳时遇到了可怕的事情 :( 也许你可以帮忙!stackoverflow.com/questions/26873200/…
    猜你喜欢
    • 2013-10-11
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 2017-11-08
    • 2017-07-01
    相关资源
    最近更新 更多