如何根据历史时间生成UUID?

问题描述 投票:3回答:1

我正在使用https://github.com/ramsey/uuid库来生成UUID(基于时间的v1 UUID)。

如何使用历史时间而不是当前时间从此库中生成UUID?

我感觉它与FixedTimeProvider类有关,并且类似下面的内容,但不确定如何使它工作。

$uuidFactory = new \Ramsey\Uuid\UuidFactory();
$uuidFactory->setTimeGenerator(new \Ramsey\Uuid\Generator\DefaultTimeGenerator(
    new \MyVendor\Uuid\NodeProvider(),
    new \MyVendor\Uuid\TimeConverter(),
    new \MyVendor\Uuid\TimeProvider()
));
\Ramsey\Uuid\Uuid::setFactory($uuidFactory);

$uuid = \Ramsey\Uuid\Uuid::uuid1();
php uuid
1个回答
0
投票

这是您的操作方式:

$timestamp = strtotime('2017-01-01 12:00:00');
$startTimeProvider = new FixedTimeProvider([
        'sec' => $timestamp,
        'usec' => 0,
    ]);
$startTimeFeatureSet = new FeatureSet();
$startTimeFeatureSet->setTimeProvider($startTimeProvider);
$factory = new UuidFactory($startTimeFeatureSet);
Uuid::setFactory($factory);
echo Uuid::uuid1()->toString();

您可以测试此处生成的UUID的时间戳:https://www.famkruithof.net/uuid/uuidgen

© www.soinside.com 2019 - 2024. All rights reserved.