aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/ramsey/uuid/src/Rfc4122/UuidV1.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/ramsey/uuid/src/Rfc4122/UuidV1.php')
-rw-r--r--vendor/ramsey/uuid/src/Rfc4122/UuidV1.php40
1 files changed, 36 insertions, 4 deletions
diff --git a/vendor/ramsey/uuid/src/Rfc4122/UuidV1.php b/vendor/ramsey/uuid/src/Rfc4122/UuidV1.php
index 515c038d9..764e42f84 100644
--- a/vendor/ramsey/uuid/src/Rfc4122/UuidV1.php
+++ b/vendor/ramsey/uuid/src/Rfc4122/UuidV1.php
@@ -14,25 +14,31 @@ declare(strict_types=1);
namespace Ramsey\Uuid\Rfc4122;
+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\Rfc4122\FieldsInterface as Rfc4122FieldsInterface;
use Ramsey\Uuid\Uuid;
+use Throwable;
+
+use function str_pad;
+
+use const STR_PAD_LEFT;
/**
- * Gregorian time, or version 1, UUIDs include timestamp, clock sequence, and node
+ * Time-based, or version 1, UUIDs include timestamp, clock sequence, and node
* values that are combined into a 128-bit unsigned integer
*
* @psalm-immutable
*/
final class UuidV1 extends Uuid implements UuidInterface
{
- use TimeTrait;
-
/**
- * Creates a version 1 (Gregorian time) UUID
+ * Creates a version 1 (time-based) UUID
*
* @param Rfc4122FieldsInterface $fields The fields from which to construct a UUID
* @param NumberConverterInterface $numberConverter The number converter to use
@@ -57,4 +63,30 @@ final class UuidV1 extends Uuid implements UuidInterface
parent::__construct($fields, $numberConverter, $codec, $timeConverter);
}
+
+ /**
+ * Returns a DateTimeInterface object representing the timestamp associated
+ * with the UUID
+ *
+ * The timestamp value is only meaningful in a time-based UUID, which
+ * has version type 1.
+ *
+ * @return DateTimeImmutable A PHP DateTimeImmutable instance representing
+ * the timestamp of a version 1 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);
+ }
+ }
}