如何从UUID v1(TimeUUID)使用JavaScript提取时间戳?

我使用Cassandra DB和Helenus模块来控制nodejs。 我有一些包含TimeUUID列的行。 如何从JavaScript中的TimeUUID获取时间戳?

你可以在unixTimestampOf中使用unixTimestampOfdateOf函数,或者你可以自己做,很难:

时间被编码到UUID的前64位,但是它与其他部分交错,所以提取时间并不是非常简单。

如果nTimeUUID的整数表示,那么可以像这样提取UNIX纪元:

 n = (value >> 64) t = 0 t |= (n & 0x0000000000000fff) << 48 t |= (n & 0x00000000ffff0000) << 16 t |= (n & 0xffffffff00000000) >> 32 t -= 122192928000000000 seconds = t/10_000_000 microseconds = (t - seconds * 10_000_000)/10.0 

这段代码来自我的Ruby CQL3驱动程序cql-rb,可以在这里find: https : //github.com/iconara/cql-rb/blob/master/lib/cql/time_uuid.rb

我使用这个资源: http : //www.famkruithof.net/guid-uuid-timebased.html ,和RFC来实现该代码。

这个库( UUID_to_Date )非常简单快捷! 只使用原生的String函数。 也许这个JavaScript API可以帮助您将UUID转换为date格式,Javascript是简单的语言,这个简单的代码可以帮助编写每种语言的API。

该API将UUID v1从1970-01-01转换为sec



你们都需要:

  get_time_int = function (uuid_str) { var uuid_arr = uuid_str.split( '-' ), time_str = [ uuid_arr[ 2 ].substring( 1 ), uuid_arr[ 1 ], uuid_arr[ 0 ] ].join( '' ); return parseInt( time_str, 16 ); }; get_date_obj = function (uuid_str) { var int_time = this.get_time_int( uuid_str ) - 122192928000000000, int_millisec = Math.floor( int_time / 10000 ); return new Date( int_millisec ); }; 


例:

  var date_obj = get_date_obj( '8bf1aeb8-6b5b-11e4-95c0-001dba68c1f2' ); date_obj.toLocaleString( );// '11/13/2014, 9:06:06 PM' 

nodejs的node-uuid模块包含将uuid v1转换为时间戳的方法

提交函数从uuid v1提取msecs