14

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

4

4 回答 4

23

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

此 API 将 UUID v1 转换为 1970-01-01 的秒



你们都需要:

    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'
于 2014-11-13T18:25:12.820 回答
9

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

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

如果n是 的整数表示,TimeUUID那么您可以像这样提取 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,可以在这里找到完整的代码:https ://github.com/iconara/cql-rb/blob/master/lib/cql/time_uuid.rb

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

于 2013-07-10T14:42:32.913 回答
6

使用uuid-time模块。

我在这里询问了 uuid 模块的维护者https://github.com/kelektiv/node-uuid/issues/297,他们将我指向 uuid-time 模块https://www.npmjs.com/package/uuid-time

于 2018-10-17T15:53:58.733 回答
4

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

使用从 uuid v1 中提取毫秒的函数提交

于 2013-07-24T06:58:25.987 回答