从 uuid1 中提取时间戳

Extract timestamp from uuid1

对于这个非常基础的话题,我深表歉意,但经过多次 Google 搜索

我还是找不到合适的答案

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

经过研究,我没有找到任何简单的解决方案...没有提取此时间戳的基本解决方案?

此致,

观察您提供的 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 的时间戳,你应该能够通过比较得到另一个。

这个问题突然出现在我的雷达上,因为它被标记为 "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