【问题标题】:Pull date from mongo _id on the client side从客户端的 mongo _id 中提取日期
【发布时间】:2012-04-27 06:51:29
【问题描述】:

我使用我的文档 _id 客户端作为字符串。我希望能够像在服务器上一样从该值中提取时间戳。是否可以在客户端重新创建此功能? (重铸为objectid,或者创建一个独立的函数来拉取这个数据)

示例_id: "4f94c2a11a6bbec3872cb315"

谢谢!

【问题讨论】:

    标签: javascript node.js mongodb


    【解决方案1】:

    这个怎么样,分解成几个步骤......不幸的是,它只是存储在 ObjectID 中的第二次解析时间。

    var id = "4f94c2a11a6bbec3872cb315"​;
    // first 4 bytes are the timestamp portion (8 hex chars)
    var timehex = id.sub​string(0,8);
    console.log(timehex); // gives: 4f94c2a1
    
    // convert to a number... base 16
    var secondsSinceEpoch = parseInt(timehex, 16);
    console.log(secondsSinceEpoch); // gives: 1335149217
    
    // convert to milliseconds, and create a new date
    var dt = new Date(secondsSinceEpoch*1000);
    console.log(dt);​ // gives: Sun Apr 22 2012 22:46:57 GMT-0400 (EDT)
    

    如果您想测试,请参阅 jsfiddle:http://jsfiddle.net/pZdyM/

    注意:这有点笨拙——它取决于当前的 ObjectID 格式。他们可能有一天会在 ObjectID 内移动时间戳,这会破坏这一点。

    【讨论】:

    • 酷,这是一个非常好的开始,而且我现在知道十六进制时间的位置:) -- 我想知道是否有办法在未来证明这一点,可能只需要知道什么我正在运行的东西的版本以及十六进制的存储方式。
    • 他们正在讨论将时间移到比最左边的字节更重要的地方,以便让 ObjectID 更好地作为分片键。但看起来他们会尝试做其他事情,比如:jira.mongodb.org/browse/SERVER-2001 所以它可能比我想象的更安全。 groups.google.com/group/mongodb-user/browse_thread/thread/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    相关资源
    最近更新 更多