2012-04-27 8 views
3

私の文書_idをクライアント側の文字列として使用します。私はあなたがサーバー上でできるように、この値からタイムスタンプを引き出すことが大好きです。クライアント側でこの機能を再現することは可能ですか?クライアント側のmongo _idの日付を取得します

_id: "4f94c2a11a6bbec3872cb315"

おかげで(このデータをプルするようOBJECTID改作、またはスタンドアロン関数を作成)!

答えて

9

これについては、手順に分かれています...残念ながら、それはObjectIDに格納されるのは2番目の解決時間です。あなたがテストしたい場合は

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/

NOTE:これは一種のクルージ的である - それは、現在のオブジェクトID形式によって異なります。彼らはいつかObjectIDの中でタイムスタンプを動かすかもしれません。それはこれを破るでしょう。

+0

クール、これは非常にラディカルなスタートです。私は時間の16進数が今どこにあるのか知っています:) - 将来の証拠になる方法さえあるのだろうか、おそらくちょうどいつも、 mの実行と16進数の格納方法を示します。 – fancy

+0

彼らはObjectIDをシャーディングキーとしてより良くするために、時間を左端のバイトよりも重要でないところに移動することについて議論していました。しかし、次のようなことをしようとしているように見えます。https://jira.mongodb.org/browse/SERVER-2001だから、私の考えよりも安全かもしれません。 http://groups.google.com/group/mongodb-user/browse_thread/thread/0e807bee202d18ee?pli=1 –

関連する問題