aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/ramsey/uuid/src/Nonstandard/UuidV6.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/ramsey/uuid/src/Nonstandard/UuidV6.php')
-rw-r--r--vendor/ramsey/uuid/src/Nonstandard/UuidV6.php52
1 files changed, 40 insertions, 12 deletions
diff --git a/vendor/ramsey/uuid/src/Nonstandard/UuidV6.php b/vendor/ramsey/uuid/src/Nonstandard/UuidV6.php
index 1a7bbaf75..05586b3eb 100644
--- a/vendor/ramsey/uuid/src/Nonstandard/UuidV6.php
+++ b/vendor/ramsey/uuid/src/Nonstandard/UuidV6.php
@@ -14,34 +14,39 @@ declare(strict_types=1);
namespace Ramsey\Uuid\Nonstandard;
+use DateTimeImmutable;
+use DateTimeInterface;
use Ramsey\Uuid\Codec\CodecInterface;
use Ramsey\Uuid\Converter\NumberConverterInterface;
use Ramsey\Uuid\Converter\TimeConverterInterface;
+use Ramsey\Uuid\Exception\DateTimeException;
use Ramsey\Uuid\Exception\InvalidArgumentException;
use Ramsey\Uuid\Lazy\LazyUuidFromString;
use Ramsey\Uuid\Rfc4122\FieldsInterface as Rfc4122FieldsInterface;
-use Ramsey\Uuid\Rfc4122\TimeTrait;
use Ramsey\Uuid\Rfc4122\UuidInterface;
use Ramsey\Uuid\Rfc4122\UuidV1;
use Ramsey\Uuid\Uuid;
+use Throwable;
+
+use function hex2bin;
+use function str_pad;
+use function substr;
+
+use const STR_PAD_LEFT;
/**
- * Reordered time, or version 6, UUIDs include timestamp, clock sequence, and
- * node values that are combined into a 128-bit unsigned integer
- *
- * @deprecated Use {@see \Ramsey\Uuid\Rfc4122\UuidV6} instead.
+ * Ordered-time, or version 6, UUIDs include timestamp, clock sequence, and node
+ * values that are combined into a 128-bit unsigned integer
*
* @link https://github.com/uuid6/uuid6-ietf-draft UUID version 6 IETF draft
* @link http://gh.peabody.io/uuidv6/ "Version 6" UUIDs
*
* @psalm-immutable
*/
-class UuidV6 extends Uuid implements UuidInterface
+final class UuidV6 extends Uuid implements UuidInterface
{
- use TimeTrait;
-
/**
- * Creates a version 6 (reordered time) UUID
+ * Creates a version 6 (time-based) UUID
*
* @param Rfc4122FieldsInterface $fields The fields from which to construct a UUID
* @param NumberConverterInterface $numberConverter The number converter to use
@@ -57,10 +62,10 @@ class UuidV6 extends Uuid implements UuidInterface
CodecInterface $codec,
TimeConverterInterface $timeConverter
) {
- if ($fields->getVersion() !== Uuid::UUID_TYPE_REORDERED_TIME) {
+ if ($fields->getVersion() !== Uuid::UUID_TYPE_PEABODY) {
throw new InvalidArgumentException(
'Fields used to create a UuidV6 must represent a '
- . 'version 6 (reordered time) UUID'
+ . 'version 6 (ordered-time) UUID'
);
}
@@ -68,6 +73,29 @@ class UuidV6 extends Uuid implements UuidInterface
}
/**
+ * Returns a DateTimeInterface object representing the timestamp associated
+ * with the UUID
+ *
+ * @return DateTimeImmutable A PHP DateTimeImmutable instance representing
+ * the timestamp of a version 6 UUID
+ */
+ public function getDateTime(): DateTimeInterface
+ {
+ $time = $this->timeConverter->convertTime($this->fields->getTimestamp());
+
+ try {
+ return new DateTimeImmutable(
+ '@'
+ . $time->getSeconds()->toString()
+ . '.'
+ . str_pad($time->getMicroseconds()->toString(), 6, '0', STR_PAD_LEFT)
+ );
+ } catch (Throwable $e) {
+ throw new DateTimeException($e->getMessage(), (int) $e->getCode(), $e);
+ }
+ }
+
+ /**
* Converts this UUID into an instance of a version 1 UUID
*/
public function toUuidV1(): UuidV1
@@ -88,7 +116,7 @@ class UuidV6 extends Uuid implements UuidInterface
/**
* Converts a version 1 UUID into an instance of a version 6 UUID
*/
- public static function fromUuidV1(UuidV1 $uuidV1): \Ramsey\Uuid\Rfc4122\UuidV6
+ public static function fromUuidV1(UuidV1 $uuidV1): UuidV6
{
$hex = $uuidV1->getHex()->toString();
$hex = substr($hex, 13, 3)