从uuid1中提取时间戳

时间:2016-10-26 18:06:11

标签: php timestamp uuid

我很抱歉这个非常基本的话题,但经过多次Google搜索后我找不到合适的答案

我有一个uuid1并想提取其中包含的时间戳,这似乎是100%可能的,因为这个网站给了我正确的答案:https://www.famkruithof.net/uuid/uuidgen当我尝试使用ce53f406-9ba0-11e6- a6e8-e715bd508dc3

我的研究后没有找到任何简单的解决方案......没有基本的解决方案来提取这个时间戳?

致以最诚挚的问候,

2 个答案:

答案 0 :(得分:2)

这个问题突然出现在我的雷达上,因为它标有“php”。如果您正在寻找PHP解决方案来获取版本1 UUID的时间戳,您可以使用ramsey/uuid库来解析UUID。 (这是我的图书馆,所以我有点偏颇。)

使用Composer安装库:

composer require ramsey/uuid

然后你可以做这样的事情从UUID获取一个PHP DateTime对象:

$myUuid = 'ce53f406-9ba0-11e6-a6e8-e715bd508dc3';

$uuid = \Ramsey\Uuid\Uuid::fromString($myUuid);

echo 'UUID timestamp (60-bit integer): ' . $uuid->getTimestamp() . "\n";
echo 'Formatted date/time: ' . $uuid->getDateTime()->format('r') . "\n";
echo 'Unix timestamp: ' . $uuid->getDateTime()->getTimestamp() . "\n";

此示例将打印出类似于以下内容的内容:

UUID timestamp (60-bit integer): 136967953640059910
Formatted date/time: Wed, 26 Oct 2016 17:22:44 +0000
Unix timestamp: 1477502564

答案 1 :(得分:1)

观察您提供的UUID:

ce53f406-9ba0-11e6-a6e8-e715bd508dc3

第一个八度音阶是ce53f406。这是十六进制数,单位为100纳秒。意思是,这个部分每100纳秒的间隔会增加1。此八度音程的最大数量为ffffffff。达到ffffffff后,最左侧的八度音将重置为0,而下一个八度音程(9ba0)将增加1,依此类推。因此,在每100纳秒的时间间隔内,UUID将如下生成:

ce53f406-9ba0-11e6-a6e8-e715bd508dc3
ce53f407-9ba0-11e6-a6e8-e715bd508dc3
ce53f408-9ba0-11e6-a6e8-e715bd508dc3
ce53f409-9ba0-11e6-a6e8-e715bd508dc3
ce53f40a-9ba0-11e6-a6e8-e715bd508dc3
.
.
.
fffffffd-9ba0-11e6-a6e8-e715bd508dc3
fffffffe-9ba0-11e6-a6e8-e715bd508dc3
ffffffff-9ba0-11e6-a6e8-e715bd508dc3
00000000-9ba1-11e6-a6e8-e715bd508dc3

现在,您知道逻辑,如果您知道一个UUID的时间戳,您应该能够通过比较获得另一个UUID。