From a95bf6564a1c91671dd2c2a312fb7efda68abf8d Mon Sep 17 00:00:00 2001 From: Baptiste Langlade Date: Sun, 18 Jan 2026 09:50:03 +0100 Subject: [PATCH] alias implementation to the innmind/time one --- composer.json | 4 +- fixtures/Period.php | 62 +- fixtures/PointInTime.php | 72 +- fixtures/Timezone.php | 36 +- proofs/elapsedPeriod.php | 91 --- proofs/pointInTime/highResolution.php | 40 -- src/Calendar/Day.php | 49 +- src/Calendar/Month.php | 64 +- src/Clock.php | 100 +-- src/Clock/Implementation.php | 37 - src/Clock/Logger.php | 79 --- src/Clock/OfFormat.php | 44 -- src/Clock/Via.php | 99 --- src/ElapsedPeriod.php | 73 +- src/Format.php | 115 +-- src/Format/Custom.php | 11 +- src/Move/EndOfDay.php | 23 +- src/Move/EndOfMonth.php | 20 +- src/Move/EndOfYear.php | 21 +- src/Move/Month.php | 63 +- src/Move/StartOfDay.php | 23 +- src/Move/StartOfMonth.php | 19 +- src/Move/StartOfYear.php | 19 +- src/Offset.php | 104 +-- src/Period.php | 489 +------------ src/Period/Value.php | 28 +- src/PointInTime.php | 319 +-------- src/PointInTime/Day.php | 68 +- src/PointInTime/HighResolution.php | 96 --- src/PointInTime/Hour.php | 44 +- src/PointInTime/Microsecond.php | 35 +- src/PointInTime/Millisecond.php | 35 +- src/PointInTime/Minute.php | 44 +- src/PointInTime/Month.php | 44 +- src/PointInTime/Second.php | 35 +- src/PointInTime/Year.php | 51 +- src/Timezone.php | 30 +- src/Timezone/Africa.php | 348 +--------- src/Timezone/America.php | 845 +---------------------- src/Timezone/America/Argentina.php | 102 +-- src/Timezone/America/Indiana.php | 72 +- src/Timezone/America/NorthDakota.php | 42 +- src/Timezone/Antartica.php | 96 +-- src/Timezone/Arctic.php | 30 +- src/Timezone/Asia.php | 570 +-------------- src/Timezone/Atlantic.php | 96 +-- src/Timezone/Australia.php | 156 +---- src/Timezone/Europe.php | 378 +--------- src/Timezone/Indian.php | 90 +-- src/Timezone/Pacific.php | 276 +------- src/Timezones.php | 101 +-- tests/PointInTime/HighResolutionTest.php | 75 -- 52 files changed, 88 insertions(+), 5775 deletions(-) delete mode 100644 proofs/pointInTime/highResolution.php delete mode 100644 src/Clock/Implementation.php delete mode 100644 src/Clock/Logger.php delete mode 100644 src/Clock/OfFormat.php delete mode 100644 src/Clock/Via.php delete mode 100644 src/PointInTime/HighResolution.php delete mode 100644 tests/PointInTime/HighResolutionTest.php diff --git a/composer.json b/composer.json index 615ff95..3c40f24 100644 --- a/composer.json +++ b/composer.json @@ -17,7 +17,7 @@ "require": { "php": "~8.4", "psr/log": "~3.0", - "innmind/immutable": "~6.0" + "innmind/time": "~1.0" }, "autoload": { "psr-4": { @@ -32,7 +32,7 @@ }, "require-dev": { "innmind/static-analysis": "~1.3", - "innmind/black-box": "~6.5", + "innmind/black-box": "~6.9", "innmind/coding-standard": "^2.0.1" }, "conflict": { diff --git a/fixtures/Period.php b/fixtures/Period.php index 41bb7ec..04624c5 100644 --- a/fixtures/Period.php +++ b/fixtures/Period.php @@ -3,64 +3,6 @@ namespace Fixtures\Innmind\TimeContinuum; -use Innmind\TimeContinuum\Period as Model; -use Innmind\BlackBox\Set; +use Fixtures\Innmind\Time; -final class Period -{ - /** - * @return Set - */ - public static function any(): Set - { - return Set\Composite::immutable( - Model::of(...), - Set\Integers::between(0, 9999), - Set\Integers::between(0, 12), - Set\Integers::between(0, 31), - Set\Integers::between(0, 23), - Set\Integers::between(0, 59), - Set\Integers::between(0, 59), - Set\Integers::between(0, 999), - Set\Integers::between(0, 999), - )->take(100); - } - - /** - * @return Set - */ - public static function anyNumberOfYear(): Set - { - return Set\Decorate::immutable( - Model::year(...), - Set\Integers::between(0, 9999), - )->take(100); - } - - /** - * @return Set - */ - public static function lessThanAYear(): Set - { - return Set\Composite::immutable( - static function($day, $hour, $minute, $second, $millisecond, $microsecond): Model { - return Model::of( - 0, - 0, - $day, - $hour, - $minute, - $second, - $millisecond, - $microsecond, - ); - }, - Set\Integers::between(0, 364), - Set\Integers::between(0, 23), - Set\Integers::between(0, 59), - Set\Integers::between(0, 59), - Set\Integers::between(0, 999), - Set\Integers::between(0, 999), - )->take(100); - } -} +\class_alias(Time\Period::class, Period::class); diff --git a/fixtures/PointInTime.php b/fixtures/PointInTime.php index c9cc97a..d4b7680 100644 --- a/fixtures/PointInTime.php +++ b/fixtures/PointInTime.php @@ -3,74 +3,6 @@ namespace Fixtures\Innmind\TimeContinuum; -use Innmind\TimeContinuum\PointInTime as Model; -use Innmind\BlackBox\Set; +use Fixtures\Innmind\Time; -final class PointInTime -{ - /** - * @return Set - */ - public static function any(): Set - { - return self::yearRange(0, 9999)->take(100); - } - - /** - * @param string $point String representation of a date - * @return Set - */ - public static function after(string $point): Set - { - $lower = Model::at(new \DateTimeImmutable($point)); - - return self::yearRange($lower->year()->toInt(), 9999) - ->filter(static function($point) use ($lower): bool { - return $point->aheadOf($lower); - }) - ->take(100); - } - - /** - * @param string $point String representation of a date - * @return Set - */ - public static function before(string $point): Set - { - $upper = Model::at(new \DateTimeImmutable($point)); - - return self::yearRange(0, $upper->year()->toInt()) - ->filter(static function($point) use ($upper): bool { - return $upper->aheadOf($point); - }) - ->take(100); - } - - /** - * @return Set - */ - private static function yearRange(int $lowerBound, int $upperBound): Set - { - return Set\Composite::immutable( - static function( - int|string ...$components, - ): Model { - return Model::at(new \DateTimeImmutable(\sprintf( - '%02s-%02d-%02dT%02d:%02d:%02d.%03d%03d%s%02d:%s', - ...$components, - ))); - }, - Set\Integers::between($lowerBound, $upperBound), - Set\Integers::between(1, 12), - Set\Integers::between(1, 31), - Set\Integers::between(0, 23), - Set\Integers::between(0, 59), - Set\Integers::between(0, 59), - Set\Integers::between(0, 999), - Set\Integers::between(0, 999), - Set\Elements::of('-', '+'), - Set\Integers::between(0, 12), - Set\Elements::of('00', '15', '30', '45'), - ); - } -} +\class_alias(Time\Point::class, PointInTime::class); diff --git a/fixtures/Timezone.php b/fixtures/Timezone.php index 122ecc0..7169546 100644 --- a/fixtures/Timezone.php +++ b/fixtures/Timezone.php @@ -3,38 +3,6 @@ namespace Fixtures\Innmind\TimeContinuum; -use Innmind\TimeContinuum\{ - Timezone as Model, - Timezones, - Offset, -}; -use Innmind\BlackBox\Set; +use Fixtures\Innmind\Time; -final class Timezone -{ - /** - * @return Set\Provider - */ - public static function any(): Set\Provider - { - return Set::compose( - static fn($offset, $daylight) => static fn(Timezones $timezones) => Model::of( - $offset, - $daylight, - ), - Set::either( - Set::compose( - Offset::plus(...), - Set::integers()->between(0, 14), - Set::of(0, 15, 30, 45), - ), - Set::compose( - Offset::minus(...), - Set::integers()->between(0, 12), - Set::of(0, 15, 30, 45), - ), - ), - Set::of(true, false), - ); - } -} +\class_alias(Time\Zone::class, Timezone::class); diff --git a/proofs/elapsedPeriod.php b/proofs/elapsedPeriod.php index cb4cc9b..b2bd2e2 100644 --- a/proofs/elapsedPeriod.php +++ b/proofs/elapsedPeriod.php @@ -2,7 +2,6 @@ declare(strict_types = 1); use Innmind\TimeContinuum\{ - PointInTime\HighResolution, Period, ElapsedPeriod, }; @@ -10,72 +9,6 @@ use Innmind\BlackBox\Set; return static function() { - yield proof( - 'High resolution elapsed period', - given( - Set::integers()->above(0), - Set::integers()->above(0), - Set::integers()->between(0, 999_999_999), - Set::integers()->between(0, 999_999_999), - )->filter(static fn($start, $end) => $end > $start), - static function( - $assert, - $startSeconds, - $endSeconds, - $startNanoseconds, - $endNanoseconds, - ) { - $start = HighResolution::of($startSeconds, $startNanoseconds); - $end = HighResolution::of($endSeconds, $endNanoseconds); - - $assert->true( - $start - ->elapsedSince($start) - ->equals( - Period::microsecond(0)->asElapsedPeriod(), - ), - ); - $assert->true( - $end - ->elapsedSince($start) - ->longerThan( - Period::microsecond(1)->asElapsedPeriod(), - ), - ); - }, - ); - - yield proof( - 'High resolution elapsed period within same second', - given( - Set::integers()->between(0, 999_999_999), - Set::integers()->between(0, 999_999_999), - )->filter(static fn($start, $end) => $end > $start && ($end - $start) > 1_000), - static function( - $assert, - $startNanoseconds, - $endNanoseconds, - ) { - $start = HighResolution::of(0, $startNanoseconds); - $end = HighResolution::of(0, $endNanoseconds); - - $assert->true( - $start - ->elapsedSince($start) - ->equals( - Period::microsecond(0)->asElapsedPeriod(), - ), - ); - $assert->true( - $end - ->elapsedSince($start) - ->longerThan( - Period::microsecond(1)->asElapsedPeriod(), - ), - ); - }, - ); - yield proof( 'Elapsed period', given( @@ -124,30 +57,6 @@ static function($assert, $start, $microsecond) { }, ); - yield proof( - 'Negative high resolution elapsed periods throws', - given( - Set::integers()->above(0), - Set::integers()->above(0), - Set::integers()->between(0, 999_999_999), - Set::integers()->between(0, 999_999_999), - )->filter(static fn($start, $end) => $end > $start), - static function( - $assert, - $startSeconds, - $endSeconds, - $startNanoseconds, - $endNanoseconds, - ) { - $start = HighResolution::of($startSeconds, $startNanoseconds); - $end = HighResolution::of($endSeconds, $endNanoseconds); - - $assert->throws( - static fn() => $start->elapsedSince($end), - ); - }, - ); - yield test( 'Regression elapsed period', static function($assert) { diff --git a/proofs/pointInTime/highResolution.php b/proofs/pointInTime/highResolution.php deleted file mode 100644 index e13710c..0000000 --- a/proofs/pointInTime/highResolution.php +++ /dev/null @@ -1,40 +0,0 @@ -above(0), - Set::integers()->above(0), - Set::integers()->between(0, 999_999_999), - Set::integers()->between(0, 999_999_999), - )->filter(static fn($start, $end) => $start < $end), - static function($assert, $start, $end, $startNanoseconds, $endNanoseconds) { - $start = HighResolution::of($start, $startNanoseconds); - $end = HighResolution::of($end, $endNanoseconds); - - $assert->true($end->aheadOf($start)); - $assert->false($start->aheadOf($end)); - }, - ); - - yield proof( - 'HighResolution::aheadOf() in same second', - given( - Set::integers()->above(0), - Set::integers()->between(0, 999_999_999), - Set::integers()->between(0, 999_999_999), - )->filter(static fn($_, $start, $end) => $start < $end), - static function($assert, $second, $start, $end) { - $start = HighResolution::of($second, $start); - $end = HighResolution::of($second, $end); - - $assert->true($end->aheadOf($start)); - $assert->false($start->aheadOf($end)); - }, - ); -}; diff --git a/src/Calendar/Day.php b/src/Calendar/Day.php index 404de85..3a5bba1 100644 --- a/src/Calendar/Day.php +++ b/src/Calendar/Day.php @@ -3,51 +3,6 @@ namespace Innmind\TimeContinuum\Calendar; -/** - * @psalm-immutable - */ -enum Day -{ - case monday; - case tuesday; - case wednesday; - case thursday; - case friday; - case saturday; - case sunday; +use Innmind\Time; - /** - * @psalm-pure - * @internal - */ - #[\NoDiscard] - public static function of(int $index): self - { - return match ($index) { - 1 => self::monday, - 2 => self::tuesday, - 3 => self::wednesday, - 4 => self::thursday, - 5 => self::friday, - 6 => self::saturday, - 0 => self::sunday, - }; - } - - /** - * @return int<0, 6> - */ - #[\NoDiscard] - public function toInt(): int - { - return match ($this) { - self::monday => 1, - self::tuesday => 2, - self::wednesday => 3, - self::thursday => 4, - self::friday => 5, - self::saturday => 6, - self::sunday => 0, - }; - } -} +\class_alias(Time\Calendar\Day::class, Day::class); diff --git a/src/Calendar/Month.php b/src/Calendar/Month.php index dbbb08b..8caf6e8 100644 --- a/src/Calendar/Month.php +++ b/src/Calendar/Month.php @@ -3,66 +3,6 @@ namespace Innmind\TimeContinuum\Calendar; -/** - * @psalm-immutable - */ -enum Month -{ - case january; - case february; - case march; - case april; - case may; - case june; - case july; - case august; - case september; - case october; - case november; - case december; +use Innmind\Time; - /** - * @psalm-pure - * @internal - */ - #[\NoDiscard] - public static function of(int $index): self - { - return match ($index) { - 1 => self::january, - 2 => self::february, - 3 => self::march, - 4 => self::april, - 5 => self::may, - 6 => self::june, - 7 => self::july, - 8 => self::august, - 9 => self::september, - 10 => self::october, - 11 => self::november, - 12 => self::december, - }; - } - - /** - * @return int<1, 12> - */ - #[\NoDiscard] - public function toInt(): int - { - return match ($this) { - self::january => 1, - self::february => 2, - self::march => 3, - self::april => 4, - self::may => 5, - self::june => 6, - self::july => 7, - self::august => 8, - self::september => 9, - self::october => 10, - self::november => 11, - self::december => 12, - }; - } -} +\class_alias(Time\Calendar\Month::class, Month::class); diff --git a/src/Clock.php b/src/Clock.php index c5ce942..32d0a6b 100644 --- a/src/Clock.php +++ b/src/Clock.php @@ -3,102 +3,6 @@ namespace Innmind\TimeContinuum; -use Innmind\TimeContinuum\Clock\{ - Implementation, - Logger, - Via, - OfFormat, -}; -use Innmind\Immutable\Attempt; -use Psr\Log\LoggerInterface; +use Innmind\Time; -final class Clock -{ - private function __construct( - private Implementation $implementation, - ) { - } - - #[\NoDiscard] - public static function live(): self - { - return self::via(PointInTime::now(...)); - } - - #[\NoDiscard] - public static function frozen(PointInTime $point): self - { - return new self(new Via( - static fn() => $point, - $point->offset(), - )); - } - - #[\NoDiscard] - public static function logger(self $clock, LoggerInterface $logger): self - { - return new self(new Logger( - $clock->implementation, - $logger, - )); - } - - /** - * @internal - * - * @param callable(): PointInTime $now - */ - #[\NoDiscard] - public static function via(callable $now): self - { - return new self(new Via( - \Closure::fromCallable($now), - Offset::utc(), - )); - } - - #[\NoDiscard] - public function now(): PointInTime - { - return $this->implementation->now(); - } - - /** - * @param callable(Timezones): Timezone $changeTimezone - */ - #[\NoDiscard] - public function switch(callable $changeTimezone): self - { - return new self($this->implementation->switch($changeTimezone)); - } - - /** - * @psalm-mutation-free - * - * @param non-empty-string $date - * - * @return Attempt - */ - #[\NoDiscard] - public function at(string $date, Format|Format\Custom $format): Attempt - { - if ($format instanceof Format\Custom) { - $format = $format->normalize(); - } - - return $this->implementation->at($date, $format); - } - - /** - * @psalm-mutation-free - */ - #[\NoDiscard] - public function ofFormat(Format|Format\Custom $format): OfFormat - { - if ($format instanceof Format\Custom) { - $format = $format->normalize(); - } - - return OfFormat::new($this, $format); - } -} +\class_alias(Time\Clock::class, Clock::class); diff --git a/src/Clock/Implementation.php b/src/Clock/Implementation.php deleted file mode 100644 index e584548..0000000 --- a/src/Clock/Implementation.php +++ /dev/null @@ -1,37 +0,0 @@ - - */ - #[\NoDiscard] - public function at(string $date, Format $format): Attempt; -} diff --git a/src/Clock/Logger.php b/src/Clock/Logger.php deleted file mode 100644 index d818885..0000000 --- a/src/Clock/Logger.php +++ /dev/null @@ -1,79 +0,0 @@ -clock->switch($changeTimezone), - $this->logger, - ); - } - - #[\Override] - public function now(): PointInTime - { - $now = $this->clock->now(); - $this->logger->debug('Current time is {point}', [ - 'point' => $now->format(Format::iso8601()), - ]); - - return $now; - } - - /** - * @psalm-mutation-free - * - * @param non-empty-string $date - * - * @return Attempt - */ - #[\Override] - public function at(string $date, Format $format): Attempt - { - return $this - ->clock - ->at($date, $format) - ->map(fn($point) => $this->log($point, $date, $format)); - } - - #[\NoDiscard] - private function log( - PointInTime $point, - string $date, - Format $format, - ): PointInTime { - /** - * @psalm-suppress ImpureVariable - * @psalm-suppress ImpurePropertyFetch - * @psalm-suppress ImpureMethodCall - */ - $this->logger->debug('Asked time {date} ({format}) resolved to {point}', [ - 'date' => $date, - 'format' => $format->toString(), - 'point' => $point->format(Format::iso8601()), - ]); - - return $point; - } -} diff --git a/src/Clock/OfFormat.php b/src/Clock/OfFormat.php deleted file mode 100644 index ade1f21..0000000 --- a/src/Clock/OfFormat.php +++ /dev/null @@ -1,44 +0,0 @@ - - */ - #[\NoDiscard] - public function at(string $date): Attempt - { - return $this->clock->at($date, $this->format); - } -} diff --git a/src/Clock/Via.php b/src/Clock/Via.php deleted file mode 100644 index 71798f2..0000000 --- a/src/Clock/Via.php +++ /dev/null @@ -1,99 +0,0 @@ -now(); - /** @var callable(non-empty-string): Timezone */ - $of = static function(string $zone) use ($now): Timezone { - /** @var non-empty-string $zone */ - $now = (new \DateTimeImmutable($now->format(Format::iso8601())))->setTimezone(new \DateTimeZone($zone)); - - return Timezone::of( - Offset::from($now->format('P')), - (bool) (int) $now->format('I'), - ); - }; - - $offset = $changeTimezone(Timezones::new($of))->offset(); - - return new self( - $this->now, - $offset, - ); - } - - #[\Override] - public function now(): PointInTime - { - return ($this->now)()->changeOffset($this->offset); - } - - /** - * @psalm-mutation-free - * - * @param non-empty-string $date - * - * @return Attempt - */ - #[\Override] - public function at(string $date, Format $format): Attempt - { - try { - $datetime = \DateTimeImmutable::createFromFormat($format->toString(), $date); - } catch (\Throwable $e) { - /** @var Attempt */ - return Attempt::error($e); - } - - if ($datetime === false) { - $lastErrors = \DateTimeImmutable::getLastErrors(); - $warnings = \implode(', ', \array_values($lastErrors['warnings'] ?? [])); - $errors = \implode(', ', \array_values($lastErrors['errors'] ?? [])); - $message = << */ - return Attempt::error(new \RuntimeException($message)); - } - - if ($datetime->format($format->toString()) !== $date) { - /** @var Attempt */ - return Attempt::error(new \RuntimeException(\sprintf( - 'Date "%s" is not exactly of the expected format "%s"', - $date, - $format->toString(), - ))); - } - - return Attempt::result(PointInTime::at($datetime)->changeOffset($this->offset)); - } -} diff --git a/src/ElapsedPeriod.php b/src/ElapsedPeriod.php index 51709f3..4e3dcbb 100644 --- a/src/ElapsedPeriod.php +++ b/src/ElapsedPeriod.php @@ -3,75 +3,6 @@ namespace Innmind\TimeContinuum; -/** - * @psalm-immutable - */ -final class ElapsedPeriod -{ - /** - * @param int<0, max> $seconds - * @param int<0, 999> $milliseconds - * @param int<0, 999> $microseconds - */ - private function __construct( - private int $seconds, - private int $milliseconds, - private int $microseconds, - ) { - } +use Innmind\Time; - /** - * @psalm-pure - * @internal - * - * @param int<0, max> $seconds - * @param int<0, 999> $milliseconds - * @param int<0, 999> $microseconds - */ - #[\NoDiscard] - public static function of( - int $seconds, - int $milliseconds, - int $microseconds, - ): self { - return new self($seconds, $milliseconds, $microseconds); - } - - #[\NoDiscard] - public function longerThan(self $period): bool - { - if ($this->seconds > $period->seconds) { - return true; - } - - if ($period->seconds > $this->seconds) { - return false; - } - - if ($this->milliseconds > $period->milliseconds) { - return true; - } - - if ($period->milliseconds > $this->milliseconds) { - return false; - } - - return $this->microseconds > $period->microseconds; - } - - #[\NoDiscard] - public function equals(self $period): bool - { - return $this->seconds === $period->seconds && - $this->milliseconds === $period->milliseconds && - $this->microseconds === $period->microseconds; - } - - #[\NoDiscard] - public function asPeriod(): Period - { - return Period::second($this->seconds) - ->add(Period::millisecond($this->milliseconds)) - ->add(Period::microsecond($this->microseconds)); - } -} +\class_alias(Time\ElapsedPeriod::class, ElapsedPeriod::class); diff --git a/src/Format.php b/src/Format.php index 0c64379..777aac7 100644 --- a/src/Format.php +++ b/src/Format.php @@ -3,117 +3,6 @@ namespace Innmind\TimeContinuum; -/** - * @psalm-immutable - */ -final class Format -{ - /** - * @param non-empty-string $value - */ - private function __construct( - private string $value, - ) { - } +use Innmind\Time; - /** - * @psalm-pure - * - * @param non-empty-string $value - */ - #[\NoDiscard] - public static function of(string $value): self - { - return new self($value); - } - - /** - * @psalm-pure - */ - #[\NoDiscard] - public static function cookie(): self - { - return new self(\DateTime::COOKIE); - } - - /** - * @psalm-pure - */ - #[\NoDiscard] - public static function iso8601(): self - { - return new self(\DateTime::ATOM); - } - - /** - * @psalm-pure - */ - #[\NoDiscard] - public static function rfc1036(): self - { - return new self(\DateTime::RFC1036); - } - - /** - * @psalm-pure - */ - #[\NoDiscard] - public static function rfc1123(): self - { - return new self(\DateTime::RFC1123); - } - - /** - * @psalm-pure - */ - #[\NoDiscard] - public static function rfc2822(): self - { - return new self(\DateTime::RFC2822); - } - - /** - * @psalm-pure - */ - #[\NoDiscard] - public static function rfc822(): self - { - return new self(\DateTime::RFC822); - } - - /** - * @psalm-pure - */ - #[\NoDiscard] - public static function rfc850(): self - { - return new self(\DateTime::RFC850); - } - - /** - * @psalm-pure - */ - #[\NoDiscard] - public static function rss(): self - { - return new self(\DateTime::RSS); - } - - /** - * @psalm-pure - */ - #[\NoDiscard] - public static function w3c(): self - { - return new self(\DateTime::W3C); - } - - /** - * @return non-empty-string - */ - #[\NoDiscard] - public function toString(): string - { - return $this->value; - } -} +\class_alias(Time\Format::class, Format::class); diff --git a/src/Format/Custom.php b/src/Format/Custom.php index bd08140..f12b7e4 100644 --- a/src/Format/Custom.php +++ b/src/Format/Custom.php @@ -3,13 +3,6 @@ namespace Innmind\TimeContinuum\Format; -use Innmind\TimeContinuum\Format; +use Innmind\Time; -/** - * @psalm-immutable - */ -interface Custom -{ - #[\NoDiscard] - public function normalize(): Format; -} +\class_alias(Time\Format\Custom::class, Custom::class); diff --git a/src/Move/EndOfDay.php b/src/Move/EndOfDay.php index 06d0d28..c36673f 100644 --- a/src/Move/EndOfDay.php +++ b/src/Move/EndOfDay.php @@ -3,25 +3,6 @@ namespace Innmind\TimeContinuum\Move; -use Innmind\TimeContinuum\{ - PointInTime, - Period, -}; +use Innmind\Time; -/** - * @psalm-immutable - */ -final class EndOfDay -{ - #[\NoDiscard] - public function __invoke(PointInTime $point): PointInTime - { - return $point->goForward( - Period::hour(23 - $point->hour()->toInt()) - ->add(Period::minute(59 - $point->minute()->toInt())) - ->add(Period::second(59 - $point->second()->toInt())) - ->add(Period::millisecond(999 - $point->millisecond()->toInt())) - ->add(Period::microsecond(999 - $point->microsecond()->toInt())), - ); - } -} +\class_alias(Time\Move\EndOfDay::class, EndOfDay::class); diff --git a/src/Move/EndOfMonth.php b/src/Move/EndOfMonth.php index 8c8e525..a0e54dd 100644 --- a/src/Move/EndOfMonth.php +++ b/src/Move/EndOfMonth.php @@ -3,22 +3,6 @@ namespace Innmind\TimeContinuum\Move; -use Innmind\TimeContinuum\{ - PointInTime, - Period, -}; +use Innmind\Time; -/** - * @psalm-immutable - */ -final class EndOfMonth -{ - #[\NoDiscard] - public function __invoke(PointInTime $point): PointInTime - { - /** @psalm-suppress InvalidArgument The negative values can only happen when working with 2 different points in time */ - return (new EndOfDay)($point)->goForward( - Period::day($point->month()->numberOfDays() - $point->day()->ofMonth()), - ); - } -} +\class_alias(Time\Move\EndOfMonth::class, EndOfMonth::class); diff --git a/src/Move/EndOfYear.php b/src/Move/EndOfYear.php index 7a0fa8d..15f2f62 100644 --- a/src/Move/EndOfYear.php +++ b/src/Move/EndOfYear.php @@ -3,23 +3,6 @@ namespace Innmind\TimeContinuum\Move; -use Innmind\TimeContinuum\{ - PointInTime, - Period, -}; +use Innmind\Time; -/** - * @psalm-immutable - */ -final class EndOfYear -{ - #[\NoDiscard] - public function __invoke(PointInTime $point): PointInTime - { - $point = (new StartOfMonth)($point)->goForward( - Period::month(12 - $point->month()->ofYear()->toInt()), - ); - - return (new EndOfMonth)($point); - } -} +\class_alias(Time\Move\EndOfYear::class, EndOfYear::class); diff --git a/src/Move/Month.php b/src/Move/Month.php index 0ea1353..066cf15 100644 --- a/src/Move/Month.php +++ b/src/Move/Month.php @@ -3,65 +3,6 @@ namespace Innmind\TimeContinuum\Move; -use Innmind\TimeContinuum\{ - PointInTime, - Period, -}; +use Innmind\Time; -/** - * @psalm-immutable - */ -final class Month -{ - private function __construct( - private string $direction, - private Period $months, - ) { - } - - #[\NoDiscard] - public function __invoke(PointInTime $point): PointInTime - { - /** @var PointInTime $newPoint */ - $newPoint = (new StartOfMonth)($point)->{$this->direction}($this->months); - $newPoint = $newPoint->goForward( - Period::hour($point->hour()->toInt()) - ->add(Period::minute($point->minute()->toInt())) - ->add(Period::second($point->second()->toInt())) - ->add(Period::millisecond($point->millisecond()->toInt())) - ->add(Period::microsecond($point->microsecond()->toInt())), - ); - - if ($newPoint->month()->numberOfDays() < $point->day()->ofMonth()) { - return $newPoint->goForward( - Period::day($newPoint->month()->numberOfDays() - 1), - ); - } - - return $newPoint->goForward( - Period::day($point->day()->ofMonth() - 1), - ); - } - - /** - * @psalm-pure - * - * @param int<1, max> $months - */ - #[\NoDiscard] - public static function forward(int $months): self - { - return new self('goForward', Period::month($months)); - } - - /** - * @psalm-pure - * - * @param int<1, max> $months - */ - #[\NoDiscard] - public static function backward(int $months): self - { - return new self('goBack', Period::month($months)); - } -} +\class_alias(Time\Move\Month::class, Month::class); diff --git a/src/Move/StartOfDay.php b/src/Move/StartOfDay.php index 468d44b..c34e04c 100644 --- a/src/Move/StartOfDay.php +++ b/src/Move/StartOfDay.php @@ -3,25 +3,6 @@ namespace Innmind\TimeContinuum\Move; -use Innmind\TimeContinuum\{ - PointInTime, - Period, -}; +use Innmind\Time; -/** - * @psalm-immutable - */ -final class StartOfDay -{ - #[\NoDiscard] - public function __invoke(PointInTime $point): PointInTime - { - return $point->goBack( - Period::hour($point->hour()->toInt()) - ->add(Period::minute($point->minute()->toInt())) - ->add(Period::second($point->second()->toInt())) - ->add(Period::millisecond($point->millisecond()->toInt())) - ->add(Period::microsecond($point->microsecond()->toInt())), - ); - } -} +\class_alias(Time\Move\StartOfDay::class, StartOfDay::class); diff --git a/src/Move/StartOfMonth.php b/src/Move/StartOfMonth.php index a94628f..ae15f94 100644 --- a/src/Move/StartOfMonth.php +++ b/src/Move/StartOfMonth.php @@ -3,21 +3,6 @@ namespace Innmind\TimeContinuum\Move; -use Innmind\TimeContinuum\{ - PointInTime, - Period, -}; +use Innmind\Time; -/** - * @psalm-immutable - */ -final class StartOfMonth -{ - #[\NoDiscard] - public function __invoke(PointInTime $point): PointInTime - { - return (new StartOfDay)($point)->goBack( - Period::day($point->day()->ofMonth() - 1), - ); - } -} +\class_alias(Time\Move\StartOfMonth::class, StartOfMonth::class); diff --git a/src/Move/StartOfYear.php b/src/Move/StartOfYear.php index f818313..c2a8537 100644 --- a/src/Move/StartOfYear.php +++ b/src/Move/StartOfYear.php @@ -3,21 +3,6 @@ namespace Innmind\TimeContinuum\Move; -use Innmind\TimeContinuum\{ - PointInTime, - Period, -}; +use Innmind\Time; -/** - * @psalm-immutable - */ -final class StartOfYear -{ - #[\NoDiscard] - public function __invoke(PointInTime $point): PointInTime - { - return (new StartOfMonth)($point)->goBack( - Period::month($point->month()->ofYear()->toInt() - 1), - ); - } -} +\class_alias(Time\Move\StartOfYear::class, StartOfYear::class); diff --git a/src/Offset.php b/src/Offset.php index 5ea33ef..e9387ac 100644 --- a/src/Offset.php +++ b/src/Offset.php @@ -3,106 +3,6 @@ namespace Innmind\TimeContinuum; -/** - * @psalm-immutable - */ -final class Offset -{ - /** - * @param int<-12, 14> $hours - * @param int<0, 59> $minutes - */ - private function __construct( - private int $hours, - private int $minutes, - private bool $plus, - ) { - } +use Innmind\Time; - /** - * @psalm-pure - */ - #[\NoDiscard] - public static function utc(): self - { - return self::plus(0, 0); - } - - /** - * @psalm-pure - * - * @param int<0, 14> $hours - * @param int<0, 59> $minutes - */ - #[\NoDiscard] - public static function plus(int $hours, int $minutes = 0): self - { - return new self($hours, $minutes, true); - } - - /** - * @psalm-pure - * - * @param int<0, 12> $hours - * @param int<0, 59> $minutes - */ - #[\NoDiscard] - public static function minus(int $hours, int $minutes = 0): self - { - return new self(-$hours, $minutes, false); - } - - /** - * @psalm-pure - * @internal - */ - #[\NoDiscard] - public static function from(string $string): self - { - [$hours, $minutes] = \explode(':', $string); - - /** @psalm-suppress ArgumentTypeCoercion */ - return new self( - (int) $hours, - (int) $minutes, - \str_starts_with($string, '+'), - ); - } - - /** - * @return int<-12, 14> - */ - #[\NoDiscard] - public function hours(): int - { - return $this->hours; - } - - /** - * @return int<0, 59> - */ - #[\NoDiscard] - public function minutes(): int - { - return $this->minutes; - } - - /** - * @return non-empty-string - */ - #[\NoDiscard] - public function toString(): string - { - if ($this->hours === 0 && $this->minutes === 0) { - return 'Z'; - } - - /** @var non-empty-string */ - return \sprintf( - '%s%02d:%02d', - $this->plus ? '+' : '-', - \abs($this->hours), - $this->minutes, - ); - } -} +\class_alias(Time\Offset::class, Offset::class); diff --git a/src/Period.php b/src/Period.php index d6321cd..35e0bec 100644 --- a/src/Period.php +++ b/src/Period.php @@ -3,491 +3,6 @@ namespace Innmind\TimeContinuum; -/** - * @psalm-immutable - */ -final class Period -{ - /** - * @param int<0, max> $year - * @param int<0, 11> $month - * @param int<0, max> $day - * @param int<0, 23> $hour - * @param int<0, 59> $minute - * @param int<0, 59> $second - * @param int<0, 999> $millisecond - * @param int<0, 999> $microsecond - */ - private function __construct( - private int $year, - private int $month, - private int $day, - private int $hour, - private int $minute, - private int $second, - private int $millisecond, - private int $microsecond, - ) { - } +use Innmind\Time; - /** - * @psalm-pure - * - * @param int<0, max> $year - * @param int<0, 11> $month - * @param int<0, max> $day - * @param int<0, 23> $hour - * @param int<0, 59> $minute - * @param int<0, 59> $second - * @param int<0, 999> $millisecond - * @param int<0, 999> $microsecond - */ - #[\NoDiscard] - public static function of( - int $year, - int $month, - int $day, - int $hour, - int $minute, - int $second, - int $millisecond, - int $microsecond, - ): self { - return new self( - $year, - $month, - $day, - $hour, - $minute, - $second, - $millisecond, - $microsecond, - ); - } - - /** - * @psalm-pure - * - * @param int<0, max> $year - * @param int<0, max> $month - * @param int<0, max> $day - * @param int<0, max> $hour - * @param int<0, max> $minute - * @param int<0, max> $second - * @param int<0, max> $millisecond - * @param int<0, max> $microsecond - */ - #[\NoDiscard] - public static function composite( - int $year, - int $month, - int $day, - int $hour, - int $minute, - int $second, - int $millisecond, - int $microsecond, - ): self { - return self::microsecond($microsecond) - ->add(self::millisecond($millisecond)) - ->add(self::second($second)) - ->add(self::minute($minute)) - ->add(self::hour($hour)) - ->add(self::day($day)) - ->add(self::month($month)) - ->add(self::year($year)); - } - - /** - * @psalm-pure - * - * @param 0|positive-int $year - */ - #[\NoDiscard] - public static function year(int $year): self - { - return new self( - $year, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - ); - } - - /** - * @psalm-pure - * - * @param 0|positive-int $month - */ - #[\NoDiscard] - public static function month(int $month): self - { - if ($month < 12) { - return new self(0, $month, 0, 0, 0, 0, 0, 0); - } - - /** @var int<0, max> */ - $year = (int) ($month / 12); - $month = $month % 12; - - return new self( - $year, - $month, - 0, - 0, - 0, - 0, - 0, - 0, - ); - } - - /** - * @psalm-pure - * - * @param 0|positive-int $day - */ - #[\NoDiscard] - public static function day(int $day): self - { - return new self( - 0, - 0, - $day, - 0, - 0, - 0, - 0, - 0, - ); - } - - /** - * @psalm-pure - * - * @param 0|positive-int $hour - */ - #[\NoDiscard] - public static function hour(int $hour): self - { - if ($hour < 24) { - return new self(0, 0, 0, $hour, 0, 0, 0, 0); - } - - /** @var int<0, max> */ - $day = (int) ($hour / 24); - $hour = $hour % 24; - - return new self( - 0, - 0, - $day, - $hour, - 0, - 0, - 0, - 0, - ); - } - - /** - * @psalm-pure - * - * @param 0|positive-int $minute - */ - #[\NoDiscard] - public static function minute(int $minute): self - { - if ($minute < 60) { - return new self(0, 0, 0, 0, $minute, 0, 0, 0); - } - - /** @var int<0, max> */ - $hour = (int) ($minute / 60); - $hour = self::hour($hour); - $minute = $minute % 60; - - return new self( - $hour->years(), - $hour->months(), - $hour->days(), - $hour->hours(), - $minute, - 0, - 0, - 0, - ); - } - - /** - * @psalm-pure - * - * @param 0|positive-int $second - */ - #[\NoDiscard] - public static function second(int $second): self - { - if ($second < 60) { - return new self(0, 0, 0, 0, 0, $second, 0, 0); - } - - /** @var int<0, max> */ - $minute = (int) ($second / 60); - $minute = self::minute($minute); - $second = $second % 60; - - return new self( - $minute->years(), - $minute->months(), - $minute->days(), - $minute->hours(), - $minute->minutes(), - $second, - 0, - 0, - ); - } - - /** - * @psalm-pure - * - * @param 0|positive-int $millisecond - */ - #[\NoDiscard] - public static function millisecond(int $millisecond): self - { - if ($millisecond < 1_000) { - return new self(0, 0, 0, 0, 0, 0, $millisecond, 0); - } - - /** @var int<0, max> */ - $second = (int) ($millisecond / 1000); - $second = self::second($second); - $millisecond = $millisecond % 1000; - - return new self( - $second->years(), - $second->months(), - $second->days(), - $second->hours(), - $second->minutes(), - $second->seconds(), - $millisecond, - 0, - ); - } - - /** - * @psalm-pure - * - * @param 0|positive-int $microsecond - */ - #[\NoDiscard] - public static function microsecond(int $microsecond): self - { - if ($microsecond < 1_000) { - return new self(0, 0, 0, 0, 0, 0, 0, $microsecond); - } - - /** @var int<0, max> */ - $millisecond = (int) ($microsecond / 1000); - $millisecond = self::millisecond($millisecond); - $microsecond = $microsecond % 1000; - - return new self( - $millisecond->years(), - $millisecond->months(), - $millisecond->days(), - $millisecond->hours(), - $millisecond->minutes(), - $millisecond->seconds(), - $millisecond->milliseconds(), - $microsecond, - ); - } - - /** - * @return int<0, max> - */ - #[\NoDiscard] - public function years(): int - { - return $this->year; - } - - /** - * @return int<0, 11> - */ - #[\NoDiscard] - public function months(): int - { - return $this->month; - } - - /** - * @return int<0, max> - */ - #[\NoDiscard] - public function days(): int - { - return $this->day; - } - - /** - * @return int<0, 23> - */ - #[\NoDiscard] - public function hours(): int - { - return $this->hour; - } - - /** - * @return int<0, 59> - */ - #[\NoDiscard] - public function minutes(): int - { - return $this->minute; - } - - /** - * @return int<0, 59> - */ - #[\NoDiscard] - public function seconds(): int - { - return $this->second; - } - - /** - * @return int<0, 999> - */ - #[\NoDiscard] - public function milliseconds(): int - { - return $this->millisecond; - } - - /** - * @return int<0, 999> - */ - #[\NoDiscard] - public function microseconds(): int - { - return $this->microsecond; - } - - #[\NoDiscard] - public function equals(self $period): bool - { - return $this->year === $period->years() && - $this->month === $period->months() && - $this->day === $period->days() && - $this->hour === $period->hours() && - $this->minute === $period->minutes() && - $this->second === $period->seconds() && - $this->millisecond === $period->milliseconds() && - $this->microsecond === $period->microseconds(); - } - - #[\NoDiscard] - public function add(self $period): self - { - $microsecond = self::microsecond($this->microsecond + $period->microseconds()); - $millisecond = self::millisecond( - $this->millisecond + - $period->milliseconds() + - $microsecond->milliseconds(), - ); - $second = self::second( - $this->second + - $period->seconds() + - $millisecond->seconds() + - $microsecond->seconds(), - ); - $minute = self::minute( - $this->minute + - $period->minutes() + - $second->minutes() + - $millisecond->minutes() + - $microsecond->minutes(), - ); - $hour = self::hour( - $this->hour + - $period->hours() + - $minute->hours() + - $second->hours() + - $millisecond->hours() + - $microsecond->hours(), - ); - $day = self::day( - $this->day + - $period->days() + - $hour->days() + - $minute->days() + - $second->days() + - $millisecond->days() + - $microsecond->days(), - ); - $month = self::month( - $this->month + - $period->months() + - $day->months() + - $hour->months() + - $minute->months() + - $second->months() + - $millisecond->months() + - $microsecond->months(), - ); - $year = self::year( - $this->year + - $period->years() + - $month->years() + - $day->years() + - $hour->years() + - $minute->years() + - $second->years() + - $millisecond->years() + - $microsecond->years(), - ); - - return new self( - $year->years(), - $month->months(), - $day->days(), - $hour->hours(), - $minute->minutes(), - $second->seconds(), - $millisecond->milliseconds(), - $microsecond->microseconds(), - ); - } - - /** - * @throws \LogicException When using a period containing months or years - */ - #[\NoDiscard] - public function asElapsedPeriod(): ElapsedPeriod - { - if ($this->months() !== 0 || $this->years() !== 0) { - // a month or a year is not constant - throw new \LogicException('Months and years can not be converted to microseconds'); - } - - $seconds = Period\Value::day->seconds($this->days()) + - Period\Value::hour->seconds($this->hours()) + - Period\Value::minute->seconds($this->minutes()) + - $this->second; - - return ElapsedPeriod::of( - $seconds, - $this->millisecond, - $this->microsecond, - ); - } -} +\class_alias(Time\Period::class, Period::class); diff --git a/src/Period/Value.php b/src/Period/Value.php index 00f5e05..592225b 100644 --- a/src/Period/Value.php +++ b/src/Period/Value.php @@ -3,30 +3,6 @@ namespace Innmind\TimeContinuum\Period; -/** - * @psalm-immutable - */ -enum Value -{ - case minute; - case hour; - case day; +use Innmind\Time; - /** - * Returns the number of seconds contained in the number of minutes, hours - * and days - * - * @param int<0, max> $number - * - * @return int<0, max> - */ - #[\NoDiscard] - public function seconds(int $number): int - { - return match ($this) { - self::minute => $number * 60, - self::hour => $number * self::minute->seconds(60), - self::day => $number * self::hour->seconds(24), - }; - } -} +\class_alias(Time\Period\Value::class, Value::class); diff --git a/src/PointInTime.php b/src/PointInTime.php index f8f444b..5c9836e 100644 --- a/src/PointInTime.php +++ b/src/PointInTime.php @@ -3,321 +3,6 @@ namespace Innmind\TimeContinuum; -use Innmind\TimeContinuum\{ - PointInTime\Year, - PointInTime\Month, - PointInTime\Day, - PointInTime\Hour, - PointInTime\Minute, - PointInTime\Second, - PointInTime\Millisecond, - PointInTime\Microsecond, - PointInTime\HighResolution, -}; +use Innmind\Time; -/** - * @psalm-immutable - */ -final class PointInTime -{ - private function __construct( - private \DateTimeImmutable $date, - private ?HighResolution $highResolution, - ) { - } - - /** - * @psalm-pure - * @internal - */ - #[\NoDiscard] - public static function at(\DateTimeImmutable $date): self - { - return new self( - $date, - null, - ); - } - - /** - * @internal - */ - #[\NoDiscard] - public static function now(): self - { - $now = new \DateTimeImmutable('now'); - $highResolution = HighResolution::now(); - - return new self( - $now, - $highResolution, - ); - } - - #[\NoDiscard] - public function year(): Year - { - return Year::of((int) $this->date->format('Y')); - } - - #[\NoDiscard] - public function month(): Month - { - return Month::of($this->date); - } - - #[\NoDiscard] - public function day(): Day - { - return Day::of($this->date); - } - - #[\NoDiscard] - public function hour(): Hour - { - /** @var int<0, 23> */ - $hour = (int) $this->date->format('G'); - - return Hour::of($hour); - } - - #[\NoDiscard] - public function minute(): Minute - { - /** @var int<0, 59> */ - $minute = (int) $this->date->format('i'); - - return Minute::of($minute); - } - - #[\NoDiscard] - public function second(): Second - { - /** @var int<0, 59> */ - $second = (int) $this->date->format('s'); - - return Second::of($second); - } - - #[\NoDiscard] - public function millisecond(): Millisecond - { - /** @var int<0, 999> */ - $millisecond = (int) $this->date->format('v'); - - return Millisecond::of($millisecond); - } - - #[\NoDiscard] - public function microsecond(): Microsecond - { - /** @var int<0, 999> */ - $microsecond = ((int) $this->date->format('u')) % 1000; - - return Microsecond::of($microsecond); - } - - #[\NoDiscard] - public function format(Format|Format\Custom $format): string - { - if ($format instanceof Format\Custom) { - $format = $format->normalize(); - } - - return $this->date->format($format->toString()); - } - - #[\NoDiscard] - public function changeOffset(Offset $offset): self - { - return new self( - $this->date->setTimezone( - new \DateTimeZone($offset->toString()), - ), - $this->highResolution, - ); - } - - #[\NoDiscard] - public function offset(): Offset - { - return Offset::from($this->date->format('P')); - } - - #[\NoDiscard] - public function elapsedSince(self $point): ElapsedPeriod - { - if (!\is_null($this->highResolution) && !\is_null($point->highResolution)) { - return $this->highResolution->elapsedSince($point->highResolution); - } - - $seconds = ((int) $this->date->format('U')) - ((int) $point->date->format('U')); - $milliseconds = $this->millisecond()->toInt() - $point->millisecond()->toInt(); - $microseconds = $this->microsecond()->toInt() - $point->microsecond()->toInt(); - - if ($milliseconds < 0) { - $seconds -= 1; - $milliseconds += 1_000; - } - - if ($microseconds < 0) { - $milliseconds -= 1; - $microseconds += 1_000; - } - - if ($milliseconds < 0) { - // This handles the case where any second diff is positive, but zero - // milliseconds and any microsecond diff. - // Duplication could be avoided by switching the 2 previous if but - // it would require to compute the number of seconds to subtract. - // The duplication seems more obvious to understand (at least for - // now). - $seconds -= 1; - $milliseconds += 1_000; - } - - if ($seconds < 0) { - throw new \RuntimeException(\sprintf( - 'Negative period : %ss, %smillis, %smicros', - $seconds, - $milliseconds, - $microseconds, - )); - } - - return ElapsedPeriod::of( - $seconds, - $milliseconds, - $microseconds, - ); - } - - #[\NoDiscard] - public function goBack(Period $period): self - { - $interval = self::dateInterval($period); - - if (\is_null($interval)) { - return $this; - } - - return new self( - $this->date->sub($interval), - null, - ); - } - - #[\NoDiscard] - public function goForward(Period $period): self - { - $interval = self::dateInterval($period); - - if (\is_null($interval)) { - return $this; - } - - return new self( - $this->date->add($interval), - null, - ); - } - - #[\NoDiscard] - public function equals(self $point): bool - { - $format = Format::of('Y-m-dTH:i:s.u'); - $self = $this->changeOffset(Offset::utc())->format($format); - $other = $point->changeOffset(Offset::utc())->format($format); - - return $self === $other; - } - - #[\NoDiscard] - public function aheadOf(self $point): bool - { - if (!\is_null($this->highResolution) && !\is_null($point->highResolution)) { - return $this->highResolution->aheadOf($point->highResolution); - } - - return $this->date > $point->date; - } - - #[\NoDiscard] - public function toString(): string - { - return $this->date->format('Y-m-d\TH:i:s.uP'); - } - - /** - * @psalm-pure - */ - #[\NoDiscard] - private static function dateInterval(Period $period): ?\DateInterval - { - /** @var list */ - $parts = []; - - if ($period->years() > 0) { - $parts[] = \sprintf( - '%s years', - $period->years(), - ); - } - - if ($period->months() > 0) { - $parts[] = \sprintf( - '%s months', - $period->months(), - ); - } - - if ($period->days() > 0) { - $parts[] = \sprintf( - '%s days', - $period->days(), - ); - } - - if ($period->hours() > 0) { - $parts[] = \sprintf( - '%s hours', - $period->hours(), - ); - } - - if ($period->minutes() > 0) { - $parts[] = \sprintf( - '%s minutes', - $period->minutes(), - ); - } - - if ($period->seconds() > 0) { - $parts[] = \sprintf( - '%s seconds', - $period->seconds(), - ); - } - - if ($period->milliseconds() > 0) { - $parts[] = \sprintf( - '%s milliseconds', - $period->milliseconds(), - ); - } - - if ($period->microseconds() > 0) { - $parts[] = \sprintf( - '%s microseconds', - $period->microseconds(), - ); - } - - if (\count($parts) === 0) { - return null; - } - - /** @psalm-suppress ImpureMethodCall */ - return \DateInterval::createFromDateString(\implode(' + ', $parts)) ?: null; - } -} +\class_alias(Time\Point::class, PointInTime::class); diff --git a/src/PointInTime/Day.php b/src/PointInTime/Day.php index 85b8f26..0c9fdfd 100644 --- a/src/PointInTime/Day.php +++ b/src/PointInTime/Day.php @@ -3,70 +3,6 @@ namespace Innmind\TimeContinuum\PointInTime; -use Innmind\TimeContinuum\Calendar; +use Innmind\Time; -/** - * @psalm-immutable - */ -final class Day -{ - /** @var int<1, 31> */ - private int $day; - private Calendar\Day $week; - /** @var int<0, 365> */ - private int $ofYear; - - private function __construct(\DateTimeImmutable $date) - { - /** @var int<1, 31> */ - $day = (int) $date->format('j'); - - $this->day = $day; - $this->week = Calendar\Day::of((int) $date->format('w')); - /** @var int<0, 365> */ - $this->ofYear = (int) $date->format('z'); - } - - /** - * @psalm-pure - * @internal - */ - #[\NoDiscard] - public static function of(\DateTimeImmutable $date): self - { - return new self($date); - } - - #[\NoDiscard] - public function ofWeek(): Calendar\Day - { - return $this->week; - } - - /** - * @return int<0, 365> - */ - #[\NoDiscard] - public function ofYear(): int - { - return $this->ofYear; - } - - /** - * @return 24 - */ - #[\NoDiscard] - public function numberOfHours(): int - { - return 24; - } - - /** - * @return int<1, 31> - */ - #[\NoDiscard] - public function ofMonth(): int - { - return $this->day; - } -} +\class_alias(Time\Point\Day::class, Day::class); diff --git a/src/PointInTime/HighResolution.php b/src/PointInTime/HighResolution.php deleted file mode 100644 index 6d98fa2..0000000 --- a/src/PointInTime/HighResolution.php +++ /dev/null @@ -1,96 +0,0 @@ - $seconds - * @param int<0, 999_999_999> $nanoseconds - */ - private function __construct( - private int $seconds, - private int $nanoseconds, - ) { - } - - /** - * @internal - */ - #[\NoDiscard] - public static function now(): self - { - /** - * @var int<0, max> $seconds - * @var int<0, 999_999_999> $nanoseconds - */ - [$seconds, $nanoseconds] = \hrtime(); - - return new self($seconds, $nanoseconds); - } - - /** - * @internal - * - * @param int<0, max> $seconds - * @param int<0, 999_999_999> $nanoseconds - */ - #[\NoDiscard] - public static function of(int $seconds, int $nanoseconds): self - { - return new self($seconds, $nanoseconds); - } - - #[\NoDiscard] - public function aheadOf(self $other): bool - { - if ($this->seconds > $other->seconds) { - return true; - } - - if ($this->seconds < $other->seconds) { - return false; - } - - return $this->nanoseconds > $other->nanoseconds; - } - - #[\NoDiscard] - public function elapsedSince(self $other): ElapsedPeriod - { - $seconds = $this->seconds - $other->seconds; - $nanoseconds = $this->nanoseconds - $other->nanoseconds; - - if ($nanoseconds < 0) { - $seconds -= 1; - $nanoseconds += 1_000_000_000; - } - - /** @var int<0, 999> */ - $microseconds = ((int) ($nanoseconds / 1_000)) % 1_000; - /** @var int<0, 999> */ - $milliseconds = ((int) ($nanoseconds / 1_000_000)) % 1_000; - - if ($seconds < 0) { - throw new \RuntimeException(\sprintf( - 'Negative period : %ss, %smillis, %smicros', - $seconds, - $milliseconds, - $microseconds, - )); - } - - return ElapsedPeriod::of( - $seconds, - $milliseconds, - $microseconds, - ); - } -} diff --git a/src/PointInTime/Hour.php b/src/PointInTime/Hour.php index cc707dc..dda1307 100644 --- a/src/PointInTime/Hour.php +++ b/src/PointInTime/Hour.php @@ -3,46 +3,6 @@ namespace Innmind\TimeContinuum\PointInTime; -/** - * @psalm-immutable - */ -final class Hour -{ - /** - * @param int<0, 23> $hour - */ - private function __construct( - private int $hour, - ) { - } +use Innmind\Time; - /** - * @psalm-pure - * @internal - * - * @param int<0, 23> $hour - */ - #[\NoDiscard] - public static function of(int $hour): self - { - return new self($hour); - } - - /** - * @return 60 - */ - #[\NoDiscard] - public function numberOfMinutes(): int - { - return 60; - } - - /** - * @return int<0, 23> - */ - #[\NoDiscard] - public function toInt(): int - { - return $this->hour; - } -} +\class_alias(Time\Point\Hour::class, Hour::class); diff --git a/src/PointInTime/Microsecond.php b/src/PointInTime/Microsecond.php index 2f65a64..b66c174 100644 --- a/src/PointInTime/Microsecond.php +++ b/src/PointInTime/Microsecond.php @@ -3,37 +3,6 @@ namespace Innmind\TimeContinuum\PointInTime; -/** - * @psalm-immutable - */ -final class Microsecond -{ - /** - * @param int<0, 999> $microsecond - */ - private function __construct( - private int $microsecond, - ) { - } +use Innmind\Time; - /** - * @psalm-pure - * @internal - * - * @param int<0, 999> $microsecond - */ - #[\NoDiscard] - public static function of(int $microsecond): self - { - return new self($microsecond); - } - - /** - * @return int<0, 999> - */ - #[\NoDiscard] - public function toInt(): int - { - return $this->microsecond; - } -} +\class_alias(Time\Point\Microsecond::class, Microsecond::class); diff --git a/src/PointInTime/Millisecond.php b/src/PointInTime/Millisecond.php index c0c52ea..6c73258 100644 --- a/src/PointInTime/Millisecond.php +++ b/src/PointInTime/Millisecond.php @@ -3,37 +3,6 @@ namespace Innmind\TimeContinuum\PointInTime; -/** - * @psalm-immutable - */ -final class Millisecond -{ - /** - * @param int<0, 999> $millisecond - */ - private function __construct( - private int $millisecond, - ) { - } +use Innmind\Time; - /** - * @psalm-pure - * @internal - * - * @param int<0, 999> $millisecond - */ - #[\NoDiscard] - public static function of(int $millisecond): self - { - return new self($millisecond); - } - - /** - * @return int<0, 999> - */ - #[\NoDiscard] - public function toInt(): int - { - return $this->millisecond; - } -} +\class_alias(Time\Point\Millisecond::class, Millisecond::class); diff --git a/src/PointInTime/Minute.php b/src/PointInTime/Minute.php index 96c8327..587ccfa 100644 --- a/src/PointInTime/Minute.php +++ b/src/PointInTime/Minute.php @@ -3,46 +3,6 @@ namespace Innmind\TimeContinuum\PointInTime; -/** - * @psalm-immutable - */ -final class Minute -{ - /** - * @param int<0, 59> $minute - */ - private function __construct( - private int $minute, - ) { - } +use Innmind\Time; - /** - * @psalm-pure - * @internal - * - * @param int<0, 59> $minute - */ - #[\NoDiscard] - public static function of(int $minute): self - { - return new self($minute); - } - - /** - * @return 60 - */ - #[\NoDiscard] - public function numberOfSeconds(): int - { - return 60; - } - - /** - * @return int<0, 59> - */ - #[\NoDiscard] - public function toInt(): int - { - return $this->minute; - } -} +\class_alias(Time\Point\Minute::class, Minute::class); diff --git a/src/PointInTime/Month.php b/src/PointInTime/Month.php index 2554b2d..3540e0d 100644 --- a/src/PointInTime/Month.php +++ b/src/PointInTime/Month.php @@ -3,46 +3,6 @@ namespace Innmind\TimeContinuum\PointInTime; -use Innmind\TimeContinuum\Calendar; +use Innmind\Time; -/** - * @psalm-immutable - */ -final class Month -{ - private Calendar\Month $month; - /** @var int<28, 31> */ - private int $days; - - private function __construct(\DateTimeImmutable $date) - { - $this->month = Calendar\Month::of((int) $date->format('n')); - /** @var int<28, 31> */ - $this->days = (int) $date->format('t'); - } - - /** - * @psalm-pure - * @internal - */ - #[\NoDiscard] - public static function of(\DateTimeImmutable $date): self - { - return new self($date); - } - - /** - * @return int<28, 31> - */ - #[\NoDiscard] - public function numberOfDays(): int - { - return $this->days; - } - - #[\NoDiscard] - public function ofYear(): Calendar\Month - { - return $this->month; - } -} +\class_alias(Time\Point\Month::class, Month::class); diff --git a/src/PointInTime/Second.php b/src/PointInTime/Second.php index 5998526..2ea8702 100644 --- a/src/PointInTime/Second.php +++ b/src/PointInTime/Second.php @@ -3,37 +3,6 @@ namespace Innmind\TimeContinuum\PointInTime; -/** - * @psalm-immutable - */ -final class Second -{ - /** - * @param int<0, 59> $second - */ - private function __construct( - private int $second, - ) { - } +use Innmind\Time; - /** - * @psalm-pure - * @internal - * - * @param int<0, 59> $second - */ - #[\NoDiscard] - public static function of(int $second): self - { - return new self($second); - } - - /** - * @return int<0, 59> - */ - #[\NoDiscard] - public function toInt(): int - { - return $this->second; - } -} +\class_alias(Time\Point\Second::class, Second::class); diff --git a/src/PointInTime/Year.php b/src/PointInTime/Year.php index 4077991..64a31b9 100644 --- a/src/PointInTime/Year.php +++ b/src/PointInTime/Year.php @@ -3,53 +3,6 @@ namespace Innmind\TimeContinuum\PointInTime; -/** - * @psalm-immutable - */ -final class Year -{ - private int $year; - /** @var 365|366 */ - private int $days; +use Innmind\Time; - private function __construct(int $year) - { - $this->year = $year; - /** @var 365|366 */ - $this->days = ((int) (new \DateTimeImmutable("{$year}-12-31T00:00:00"))->format('z')) + 1; - } - - /** - * @psalm-pure - * @internal - */ - #[\NoDiscard] - public static function of(int $year): self - { - return new self($year); - } - - /** - * @return 365|366 - */ - #[\NoDiscard] - public function numberOfDays(): int - { - return $this->days; - } - - /** - * @return 12 - */ - #[\NoDiscard] - public function numberOfMonths(): int - { - return 12; - } - - #[\NoDiscard] - public function toInt(): int - { - return $this->year; - } -} +\class_alias(Time\Point\Year::class, Year::class); diff --git a/src/Timezone.php b/src/Timezone.php index 6dc1846..3ec6e58 100644 --- a/src/Timezone.php +++ b/src/Timezone.php @@ -3,32 +3,6 @@ namespace Innmind\TimeContinuum; -final class Timezone -{ - private function __construct( - private Offset $offset, - private bool $dst, - ) { - } +use Innmind\Time; - /** - * @internal - */ - #[\NoDiscard] - public static function of(Offset $offset, bool $daylightSavingTime): self - { - return new self($offset, $daylightSavingTime); - } - - #[\NoDiscard] - public function offset(): Offset - { - return $this->offset; - } - - #[\NoDiscard] - public function daylightSavingTimeApplied(): bool - { - return $this->dst; - } -} +\class_alias(Time\Zone::class, Timezone::class); diff --git a/src/Timezone/Africa.php b/src/Timezone/Africa.php index 86d303c..086ff54 100644 --- a/src/Timezone/Africa.php +++ b/src/Timezone/Africa.php @@ -3,350 +3,6 @@ namespace Innmind\TimeContinuum\Timezone; -use Innmind\TimeContinuum\Timezone; +use Innmind\Time; -final class Africa -{ - /** - * @param callable(non-empty-string): Timezone $of - */ - private function __construct( - private $of, - ) { - } - - /** - * @internal - * - * @param callable(non-empty-string): Timezone $of - */ - #[\NoDiscard] - public static function new(callable $of): self - { - return new self($of); - } - - #[\NoDiscard] - public function lome(): Timezone - { - return ($this->of)('Africa/Lome'); - } - - #[\NoDiscard] - public function ceuta(): Timezone - { - return ($this->of)('Africa/Ceuta'); - } - - #[\NoDiscard] - public function elAaiun(): Timezone - { - return ($this->of)('Africa/El_Aaiun'); - } - - #[\NoDiscard] - public function portoNovo(): Timezone - { - return ($this->of)('Africa/Porto-Novo'); - } - - #[\NoDiscard] - public function djibouti(): Timezone - { - return ($this->of)('Africa/Djibouti'); - } - - #[\NoDiscard] - public function windhoek(): Timezone - { - return ($this->of)('Africa/Windhoek'); - } - - #[\NoDiscard] - public function algiers(): Timezone - { - return ($this->of)('Africa/Algiers'); - } - - #[\NoDiscard] - public function ouagadougou(): Timezone - { - return ($this->of)('Africa/Ouagadougou'); - } - - #[\NoDiscard] - public function bamako(): Timezone - { - return ($this->of)('Africa/Bamako'); - } - - #[\NoDiscard] - public function harare(): Timezone - { - return ($this->of)('Africa/Harare'); - } - - #[\NoDiscard] - public function bujumbura(): Timezone - { - return ($this->of)('Africa/Bujumbura'); - } - - #[\NoDiscard] - public function douala(): Timezone - { - return ($this->of)('Africa/Douala'); - } - - #[\NoDiscard] - public function brazzaville(): Timezone - { - return ($this->of)('Africa/Brazzaville'); - } - - #[\NoDiscard] - public function tripoli(): Timezone - { - return ($this->of)('Africa/Tripoli'); - } - - #[\NoDiscard] - public function casablanca(): Timezone - { - return ($this->of)('Africa/Casablanca'); - } - - #[\NoDiscard] - public function niamey(): Timezone - { - return ($this->of)('Africa/Niamey'); - } - - #[\NoDiscard] - public function mbabane(): Timezone - { - return ($this->of)('Africa/Mbabane'); - } - - #[\NoDiscard] - public function blantyre(): Timezone - { - return ($this->of)('Africa/Blantyre'); - } - - #[\NoDiscard] - public function conakry(): Timezone - { - return ($this->of)('Africa/Conakry'); - } - - #[\NoDiscard] - public function khartoum(): Timezone - { - return ($this->of)('Africa/Khartoum'); - } - - #[\NoDiscard] - public function luanda(): Timezone - { - return ($this->of)('Africa/Luanda'); - } - - #[\NoDiscard] - public function libreville(): Timezone - { - return ($this->of)('Africa/Libreville'); - } - - #[\NoDiscard] - public function maseru(): Timezone - { - return ($this->of)('Africa/Maseru'); - } - - #[\NoDiscard] - public function lusaka(): Timezone - { - return ($this->of)('Africa/Lusaka'); - } - - #[\NoDiscard] - public function darEsSalaam(): Timezone - { - return ($this->of)('Africa/Dar_es_Salaam'); - } - - #[\NoDiscard] - public function nairobi(): Timezone - { - return ($this->of)('Africa/Nairobi'); - } - - #[\NoDiscard] - public function banjul(): Timezone - { - return ($this->of)('Africa/Banjul'); - } - - #[\NoDiscard] - public function bissau(): Timezone - { - return ($this->of)('Africa/Bissau'); - } - - #[\NoDiscard] - public function nouakchott(): Timezone - { - return ($this->of)('Africa/Nouakchott'); - } - - #[\NoDiscard] - public function johannesburg(): Timezone - { - return ($this->of)('Africa/Johannesburg'); - } - - #[\NoDiscard] - public function timbuktu(): Timezone - { - return ($this->of)('Africa/Timbuktu'); - } - - #[\NoDiscard] - public function saoTome(): Timezone - { - return ($this->of)('Africa/Sao_Tome'); - } - - #[\NoDiscard] - public function freetown(): Timezone - { - return ($this->of)('Africa/Freetown'); - } - - #[\NoDiscard] - public function kampala(): Timezone - { - return ($this->of)('Africa/Kampala'); - } - - #[\NoDiscard] - public function dakar(): Timezone - { - return ($this->of)('Africa/Dakar'); - } - - #[\NoDiscard] - public function lagos(): Timezone - { - return ($this->of)('Africa/Lagos'); - } - - #[\NoDiscard] - public function cairo(): Timezone - { - return ($this->of)('Africa/Cairo'); - } - - #[\NoDiscard] - public function mogadishu(): Timezone - { - return ($this->of)('Africa/Mogadishu'); - } - - #[\NoDiscard] - public function gaborone(): Timezone - { - return ($this->of)('Africa/Gaborone'); - } - - #[\NoDiscard] - public function tunis(): Timezone - { - return ($this->of)('Africa/Tunis'); - } - - #[\NoDiscard] - public function kigali(): Timezone - { - return ($this->of)('Africa/Kigali'); - } - - #[\NoDiscard] - public function malabo(): Timezone - { - return ($this->of)('Africa/Malabo'); - } - - #[\NoDiscard] - public function abidjan(): Timezone - { - return ($this->of)('Africa/Abidjan'); - } - - #[\NoDiscard] - public function accra(): Timezone - { - return ($this->of)('Africa/Accra'); - } - - #[\NoDiscard] - public function asmera(): Timezone - { - return ($this->of)('Africa/Asmera'); - } - - #[\NoDiscard] - public function ndjamena(): Timezone - { - return ($this->of)('Africa/Ndjamena'); - } - - #[\NoDiscard] - public function lubumbashi(): Timezone - { - return ($this->of)('Africa/Lubumbashi'); - } - - #[\NoDiscard] - public function juba(): Timezone - { - return ($this->of)('Africa/Juba'); - } - - #[\NoDiscard] - public function monrovia(): Timezone - { - return ($this->of)('Africa/Monrovia'); - } - - #[\NoDiscard] - public function maputo(): Timezone - { - return ($this->of)('Africa/Maputo'); - } - - #[\NoDiscard] - public function kinshasa(): Timezone - { - return ($this->of)('Africa/Kinshasa'); - } - - #[\NoDiscard] - public function asmara(): Timezone - { - return ($this->of)('Africa/Asmara'); - } - - #[\NoDiscard] - public function bangui(): Timezone - { - return ($this->of)('Africa/Bangui'); - } - - #[\NoDiscard] - public function addisAbaba(): Timezone - { - return ($this->of)('Africa/Addis_Ababa'); - } -} +\class_alias(Time\Zone\Africa::class, Africa::class); diff --git a/src/Timezone/America.php b/src/Timezone/America.php index 61b4e38..f7f0308 100644 --- a/src/Timezone/America.php +++ b/src/Timezone/America.php @@ -3,847 +3,6 @@ namespace Innmind\TimeContinuum\Timezone; -use Innmind\TimeContinuum\{ - Timezone, - Timezone\America\Argentina, - Timezone\America\Indiana, - Timezone\America\NorthDakota, -}; +use Innmind\Time; -final class America -{ - /** - * @param callable(non-empty-string): Timezone $of - */ - private function __construct( - private $of, - ) { - } - - /** - * @internal - * - * @param callable(non-empty-string): Timezone $of - */ - #[\NoDiscard] - public static function new(callable $of): self - { - return new self($of); - } - - #[\NoDiscard] - public function argentina(): Argentina - { - return Argentina::new($this->of); - } - - #[\NoDiscard] - public function indiana(): Indiana - { - return Indiana::new($this->of); - } - - #[\NoDiscard] - public function northDakota(): NorthDakota - { - return NorthDakota::new($this->of); - } - - #[\NoDiscard] - public function montreal(): Timezone - { - return ($this->of)('America/Montreal'); - } - - #[\NoDiscard] - public function guatemala(): Timezone - { - return ($this->of)('America/Guatemala'); - } - - #[\NoDiscard] - public function boaVista(): Timezone - { - return ($this->of)('America/Boa_Vista'); - } - - #[\NoDiscard] - public function portoAcre(): Timezone - { - return ($this->of)('America/Porto_Acre'); - } - - #[\NoDiscard] - public function winnipeg(): Timezone - { - return ($this->of)('America/Winnipeg'); - } - - #[\NoDiscard] - public function santiago(): Timezone - { - return ($this->of)('America/Santiago'); - } - - #[\NoDiscard] - public function virgin(): Timezone - { - return ($this->of)('America/Virgin'); - } - - #[\NoDiscard] - public function moncton(): Timezone - { - return ($this->of)('America/Moncton'); - } - - #[\NoDiscard] - public function noronha(): Timezone - { - return ($this->of)('America/Noronha'); - } - - #[\NoDiscard] - public function recife(): Timezone - { - return ($this->of)('America/Recife'); - } - - #[\NoDiscard] - public function saintKitts(): Timezone - { - return ($this->of)('America/St_Kitts'); - } - - #[\NoDiscard] - public function rankinInlet(): Timezone - { - return ($this->of)('America/Rankin_Inlet'); - } - - #[\NoDiscard] - public function jamaica(): Timezone - { - return ($this->of)('America/Jamaica'); - } - - #[\NoDiscard] - public function lima(): Timezone - { - return ($this->of)('America/Lima'); - } - - #[\NoDiscard] - public function rosario(): Timezone - { - return ($this->of)('America/Rosario'); - } - - #[\NoDiscard] - public function cambridgeBay(): Timezone - { - return ($this->of)('America/Cambridge_Bay'); - } - - #[\NoDiscard] - public function coralHarbour(): Timezone - { - return ($this->of)('America/Coral_Harbour'); - } - - #[\NoDiscard] - public function fortWayne(): Timezone - { - return ($this->of)('America/Fort_Wayne'); - } - - #[\NoDiscard] - public function nassau(): Timezone - { - return ($this->of)('America/Nassau'); - } - - #[\NoDiscard] - public function mazatlan(): Timezone - { - return ($this->of)('America/Mazatlan'); - } - - #[\NoDiscard] - public function grandTurk(): Timezone - { - return ($this->of)('America/Grand_Turk'); - } - - #[\NoDiscard] - public function merida(): Timezone - { - return ($this->of)('America/Merida'); - } - - #[\NoDiscard] - public function ensenada(): Timezone - { - return ($this->of)('America/Ensenada'); - } - - #[\NoDiscard] - public function rainyRiver(): Timezone - { - return ($this->of)('America/Rainy_River'); - } - - #[\NoDiscard] - public function bahiaBanderas(): Timezone - { - return ($this->of)('America/Bahia_Banderas'); - } - - #[\NoDiscard] - public function guadeloupe(): Timezone - { - return ($this->of)('America/Guadeloupe'); - } - - #[\NoDiscard] - public function cuiaba(): Timezone - { - return ($this->of)('America/Cuiaba'); - } - - #[\NoDiscard] - public function scoresbysund(): Timezone - { - return ($this->of)('America/Scoresbysund'); - } - - #[\NoDiscard] - public function maceio(): Timezone - { - return ($this->of)('America/Maceio'); - } - - #[\NoDiscard] - public function curacao(): Timezone - { - return ($this->of)('America/Curacao'); - } - - #[\NoDiscard] - public function aruba(): Timezone - { - return ($this->of)('America/Aruba'); - } - - #[\NoDiscard] - public function monterrey(): Timezone - { - return ($this->of)('America/Monterrey'); - } - - #[\NoDiscard] - public function hermosillo(): Timezone - { - return ($this->of)('America/Hermosillo'); - } - - #[\NoDiscard] - public function guayaquil(): Timezone - { - return ($this->of)('America/Guayaquil'); - } - - #[\NoDiscard] - public function managua(): Timezone - { - return ($this->of)('America/Managua'); - } - - #[\NoDiscard] - public function matamoros(): Timezone - { - return ($this->of)('America/Matamoros'); - } - - #[\NoDiscard] - public function losAngeles(): Timezone - { - return ($this->of)('America/Los_Angeles'); - } - - #[\NoDiscard] - public function tegucigalpa(): Timezone - { - return ($this->of)('America/Tegucigalpa'); - } - - #[\NoDiscard] - public function monticello(): Timezone - { - return ($this->of)('America/Kentucky/Monticello'); - } - - #[\NoDiscard] - public function nome(): Timezone - { - return ($this->of)('America/Nome'); - } - - #[\NoDiscard] - public function montevideo(): Timezone - { - return ($this->of)('America/Montevideo'); - } - - #[\NoDiscard] - public function gooseBay(): Timezone - { - return ($this->of)('America/Goose_Bay'); - } - - #[\NoDiscard] - public function boise(): Timezone - { - return ($this->of)('America/Boise'); - } - - #[\NoDiscard] - public function belem(): Timezone - { - return ($this->of)('America/Belem'); - } - - #[\NoDiscard] - public function atikokan(): Timezone - { - return ($this->of)('America/Atikokan'); - } - - #[\NoDiscard] - public function swiftCurrent(): Timezone - { - return ($this->of)('America/Swift_Current'); - } - - #[\NoDiscard] - public function detroit(): Timezone - { - return ($this->of)('America/Detroit'); - } - - #[\NoDiscard] - public function laPaz(): Timezone - { - return ($this->of)('America/La_Paz'); - } - - #[\NoDiscard] - public function chicago(): Timezone - { - return ($this->of)('America/Chicago'); - } - - #[\NoDiscard] - public function creston(): Timezone - { - return ($this->of)('America/Creston'); - } - - #[\NoDiscard] - public function nipigon(): Timezone - { - return ($this->of)('America/Nipigon'); - } - - #[\NoDiscard] - public function costaRica(): Timezone - { - return ($this->of)('America/Costa_Rica'); - } - - #[\NoDiscard] - public function halifax(): Timezone - { - return ($this->of)('America/Halifax'); - } - - #[\NoDiscard] - public function yellowknife(): Timezone - { - return ($this->of)('America/Yellowknife'); - } - - #[\NoDiscard] - public function puertoRico(): Timezone - { - return ($this->of)('America/Puerto_Rico'); - } - - #[\NoDiscard] - public function edmonton(): Timezone - { - return ($this->of)('America/Edmonton'); - } - - #[\NoDiscard] - public function mexicoCity(): Timezone - { - return ($this->of)('America/Mexico_City'); - } - - #[\NoDiscard] - public function saoPaulo(): Timezone - { - return ($this->of)('America/Sao_Paulo'); - } - - #[\NoDiscard] - public function yakutat(): Timezone - { - return ($this->of)('America/Yakutat'); - } - - #[\NoDiscard] - public function saintThomas(): Timezone - { - return ($this->of)('America/St_Thomas'); - } - - #[\NoDiscard] - public function chihuahua(): Timezone - { - return ($this->of)('America/Chihuahua'); - } - - #[\NoDiscard] - public function grenada(): Timezone - { - return ($this->of)('America/Grenada'); - } - - #[\NoDiscard] - public function elSalvador(): Timezone - { - return ($this->of)('America/El_Salvador'); - } - - #[\NoDiscard] - public function santoDomingo(): Timezone - { - return ($this->of)('America/Santo_Domingo'); - } - - #[\NoDiscard] - public function montserrat(): Timezone - { - return ($this->of)('America/Montserrat'); - } - - #[\NoDiscard] - public function portoVelho(): Timezone - { - return ($this->of)('America/Porto_Velho'); - } - - #[\NoDiscard] - public function panama(): Timezone - { - return ($this->of)('America/Panama'); - } - - #[\NoDiscard] - public function antigua(): Timezone - { - return ($this->of)('America/Antigua'); - } - - #[\NoDiscard] - public function santarem(): Timezone - { - return ($this->of)('America/Santarem'); - } - - #[\NoDiscard] - public function dawson(): Timezone - { - return ($this->of)('America/Dawson'); - } - - #[\NoDiscard] - public function saintBarthelemy(): Timezone - { - return ($this->of)('America/St_Barthelemy'); - } - - #[\NoDiscard] - public function iqaluit(): Timezone - { - return ($this->of)('America/Iqaluit'); - } - - #[\NoDiscard] - public function eirunepe(): Timezone - { - return ($this->of)('America/Eirunepe'); - } - - #[\NoDiscard] - public function inuvik(): Timezone - { - return ($this->of)('America/Inuvik'); - } - - #[\NoDiscard] - public function anguilla(): Timezone - { - return ($this->of)('America/Anguilla'); - } - - #[\NoDiscard] - public function portOfSpain(): Timezone - { - return ($this->of)('America/Port_of_Spain'); - } - - #[\NoDiscard] - public function araguaina(): Timezone - { - return ($this->of)('America/Araguaina'); - } - - #[\NoDiscard] - public function guyana(): Timezone - { - return ($this->of)('America/Guyana'); - } - - #[\NoDiscard] - public function fortaleza(): Timezone - { - return ($this->of)('America/Fortaleza'); - } - - #[\NoDiscard] - public function blancSablon(): Timezone - { - return ($this->of)('America/Blanc-Sablon'); - } - - #[\NoDiscard] - public function juneau(): Timezone - { - return ($this->of)('America/Juneau'); - } - - #[\NoDiscard] - public function cayman(): Timezone - { - return ($this->of)('America/Cayman'); - } - - #[\NoDiscard] - public function menominee(): Timezone - { - return ($this->of)('America/Menominee'); - } - - #[\NoDiscard] - public function cayenne(): Timezone - { - return ($this->of)('America/Cayenne'); - } - - #[\NoDiscard] - public function pangnirtung(): Timezone - { - return ($this->of)('America/Pangnirtung'); - } - - #[\NoDiscard] - public function metlakatla(): Timezone - { - return ($this->of)('America/Metlakatla'); - } - - #[\NoDiscard] - public function asuncion(): Timezone - { - return ($this->of)('America/Asuncion'); - } - - #[\NoDiscard] - public function saintLucia(): Timezone - { - return ($this->of)('America/St_Lucia'); - } - - #[\NoDiscard] - public function saintVincent(): Timezone - { - return ($this->of)('America/St_Vincent'); - } - - #[\NoDiscard] - public function martinique(): Timezone - { - return ($this->of)('America/Martinique'); - } - - #[\NoDiscard] - public function kralendijk(): Timezone - { - return ($this->of)('America/Kralendijk'); - } - - #[\NoDiscard] - public function newYork(): Timezone - { - return ($this->of)('America/New_York'); - } - - #[\NoDiscard] - public function vancouver(): Timezone - { - return ($this->of)('America/Vancouver'); - } - - #[\NoDiscard] - public function bogota(): Timezone - { - return ($this->of)('America/Bogota'); - } - - #[\NoDiscard] - public function dominica(): Timezone - { - return ($this->of)('America/Dominica'); - } - - #[\NoDiscard] - public function danmarkshavn(): Timezone - { - return ($this->of)('America/Danmarkshavn'); - } - - #[\NoDiscard] - public function anchorage(): Timezone - { - return ($this->of)('America/Anchorage'); - } - - #[\NoDiscard] - public function marigot(): Timezone - { - return ($this->of)('America/Marigot'); - } - - #[\NoDiscard] - public function rioBranco(): Timezone - { - return ($this->of)('America/Rio_Branco'); - } - - #[\NoDiscard] - public function paramaribo(): Timezone - { - return ($this->of)('America/Paramaribo'); - } - - #[\NoDiscard] - public function caracas(): Timezone - { - return ($this->of)('America/Caracas'); - } - - #[\NoDiscard] - public function resolute(): Timezone - { - return ($this->of)('America/Resolute'); - } - - #[\NoDiscard] - public function godthab(): Timezone - { - return ($this->of)('America/Godthab'); - } - - #[\NoDiscard] - public function catamarca(): Timezone - { - return ($this->of)('America/Catamarca'); - } - - #[\NoDiscard] - public function glaceBay(): Timezone - { - return ($this->of)('America/Glace_Bay'); - } - - #[\NoDiscard] - public function regina(): Timezone - { - return ($this->of)('America/Regina'); - } - - #[\NoDiscard] - public function toronto(): Timezone - { - return ($this->of)('America/Toronto'); - } - - #[\NoDiscard] - public function barbados(): Timezone - { - return ($this->of)('America/Barbados'); - } - - #[\NoDiscard] - public function santaIsabel(): Timezone - { - return ($this->of)('America/Santa_Isabel'); - } - - #[\NoDiscard] - public function miquelon(): Timezone - { - return ($this->of)('America/Miquelon'); - } - - #[\NoDiscard] - public function havana(): Timezone - { - return ($this->of)('America/Havana'); - } - - #[\NoDiscard] - public function ojinaga(): Timezone - { - return ($this->of)('America/Ojinaga'); - } - - #[\NoDiscard] - public function denver(): Timezone - { - return ($this->of)('America/Denver'); - } - - #[\NoDiscard] - public function cancun(): Timezone - { - return ($this->of)('America/Cancun'); - } - - #[\NoDiscard] - public function thunderBay(): Timezone - { - return ($this->of)('America/Thunder_Bay'); - } - - #[\NoDiscard] - public function adak(): Timezone - { - return ($this->of)('America/Adak'); - } - - #[\NoDiscard] - public function saintJohns(): Timezone - { - return ($this->of)('America/St_Johns'); - } - - #[\NoDiscard] - public function portAuPrince(): Timezone - { - return ($this->of)('America/Port-au-Prince'); - } - - #[\NoDiscard] - public function whitehorse(): Timezone - { - return ($this->of)('America/Whitehorse'); - } - - #[\NoDiscard] - public function louisville(): Timezone - { - return ($this->of)('America/Louisville'); - } - - #[\NoDiscard] - public function manaus(): Timezone - { - return ($this->of)('America/Manaus'); - } - - #[\NoDiscard] - public function lowerPrinces(): Timezone - { - return ($this->of)('America/Lower_Princes'); - } - - #[\NoDiscard] - public function sitka(): Timezone - { - return ($this->of)('America/Sitka'); - } - - #[\NoDiscard] - public function thule(): Timezone - { - return ($this->of)('America/Thule'); - } - - #[\NoDiscard] - public function campoGrande(): Timezone - { - return ($this->of)('America/Campo_Grande'); - } - - #[\NoDiscard] - public function phoenix(): Timezone - { - return ($this->of)('America/Phoenix'); - } - - #[\NoDiscard] - public function shiprock(): Timezone - { - return ($this->of)('America/Shiprock'); - } - - #[\NoDiscard] - public function bahia(): Timezone - { - return ($this->of)('America/Bahia'); - } - - #[\NoDiscard] - public function tortola(): Timezone - { - return ($this->of)('America/Tortola'); - } - - #[\NoDiscard] - public function dawsonCreek(): Timezone - { - return ($this->of)('America/Dawson_Creek'); - } - - #[\NoDiscard] - public function tijuana(): Timezone - { - return ($this->of)('America/Tijuana'); - } - - #[\NoDiscard] - public function belize(): Timezone - { - return ($this->of)('America/Belize'); - } - - #[\NoDiscard] - public function atka(): Timezone - { - return ($this->of)('America/Atka'); - } -} +\class_alias(Time\Zone\America::class, America::class); diff --git a/src/Timezone/America/Argentina.php b/src/Timezone/America/Argentina.php index c901f21..7a256e2 100644 --- a/src/Timezone/America/Argentina.php +++ b/src/Timezone/America/Argentina.php @@ -3,104 +3,6 @@ namespace Innmind\TimeContinuum\Timezone\America; -use Innmind\TimeContinuum\Timezone; +use Innmind\Time; -final class Argentina -{ - /** - * @param callable(non-empty-string): Timezone $of - */ - private function __construct( - private $of, - ) { - } - - /** - * @internal - * - * @param callable(non-empty-string): Timezone $of - */ - #[\NoDiscard] - public static function new(callable $of): self - { - return new self($of); - } - - #[\NoDiscard] - public function rioGallegos(): Timezone - { - return ($this->of)('America/Argentina/Rio_Gallegos'); - } - - #[\NoDiscard] - public function mendoza(): Timezone - { - return ($this->of)('America/Argentina/Mendoza'); - } - - #[\NoDiscard] - public function buenosAires(): Timezone - { - return ($this->of)('America/Argentina/Buenos_Aires'); - } - - #[\NoDiscard] - public function ushuaia(): Timezone - { - return ($this->of)('America/Argentina/Ushuaia'); - } - - #[\NoDiscard] - public function sanJuan(): Timezone - { - return ($this->of)('America/Argentina/San_Juan'); - } - - #[\NoDiscard] - public function laRioja(): Timezone - { - return ($this->of)('America/Argentina/La_Rioja'); - } - - #[\NoDiscard] - public function salta(): Timezone - { - return ($this->of)('America/Argentina/Salta'); - } - - #[\NoDiscard] - public function sanLuis(): Timezone - { - return ($this->of)('America/Argentina/San_Luis'); - } - - #[\NoDiscard] - public function jujuy(): Timezone - { - return ($this->of)('America/Argentina/Jujuy'); - } - - #[\NoDiscard] - public function tucuman(): Timezone - { - return ($this->of)('America/Argentina/Tucuman'); - } - - #[\NoDiscard] - public function comodRivadavia(): Timezone - { - return ($this->of)('America/Argentina/ComodRivadavia'); - } - - #[\NoDiscard] - public function catamarca(): Timezone - { - return ($this->of)('America/Argentina/Catamarca'); - } - - #[\NoDiscard] - public function cordoba(): Timezone - { - return ($this->of)('America/Argentina/Cordoba'); - } -} +\class_alias(Time\Zone\America\Argentina::class, Argentina::class); diff --git a/src/Timezone/America/Indiana.php b/src/Timezone/America/Indiana.php index c2858ec..90c5fbe 100644 --- a/src/Timezone/America/Indiana.php +++ b/src/Timezone/America/Indiana.php @@ -3,74 +3,6 @@ namespace Innmind\TimeContinuum\Timezone\America; -use Innmind\TimeContinuum\Timezone; +use Innmind\Time; -final class Indiana -{ - /** - * @param callable(non-empty-string): Timezone $of - */ - private function __construct( - private $of, - ) { - } - - /** - * @internal - * - * @param callable(non-empty-string): Timezone $of - */ - #[\NoDiscard] - public static function new(callable $of): self - { - return new self($of); - } - - #[\NoDiscard] - public function vincennes(): Timezone - { - return ($this->of)('America/Indiana/Vincennes'); - } - - #[\NoDiscard] - public function marengo(): Timezone - { - return ($this->of)('America/Indiana/Marengo'); - } - - #[\NoDiscard] - public function tellCity(): Timezone - { - return ($this->of)('America/Indiana/Tell_City'); - } - - #[\NoDiscard] - public function knox(): Timezone - { - return ($this->of)('America/Indiana/Knox'); - } - - #[\NoDiscard] - public function vevay(): Timezone - { - return ($this->of)('America/Indiana/Vevay'); - } - - #[\NoDiscard] - public function indianapolis(): Timezone - { - return ($this->of)('America/Indiana/Indianapolis'); - } - - #[\NoDiscard] - public function petersburg(): Timezone - { - return ($this->of)('America/Indiana/Petersburg'); - } - - #[\NoDiscard] - public function winamac(): Timezone - { - return ($this->of)('America/Indiana/Winamac'); - } -} +\class_alias(Time\Zone\America\Indiana::class, Indiana::class); diff --git a/src/Timezone/America/NorthDakota.php b/src/Timezone/America/NorthDakota.php index 0a7b33b..6b2b4b6 100644 --- a/src/Timezone/America/NorthDakota.php +++ b/src/Timezone/America/NorthDakota.php @@ -3,44 +3,6 @@ namespace Innmind\TimeContinuum\Timezone\America; -use Innmind\TimeContinuum\Timezone; +use Innmind\Time; -final class NorthDakota -{ - /** - * @param callable(non-empty-string): Timezone $of - */ - private function __construct( - private $of, - ) { - } - - /** - * @internal - * - * @param callable(non-empty-string): Timezone $of - */ - #[\NoDiscard] - public static function new(callable $of): self - { - return new self($of); - } - - #[\NoDiscard] - public function beulah(): Timezone - { - return ($this->of)('America/North_Dakota/Beulah'); - } - - #[\NoDiscard] - public function newSalem(): Timezone - { - return ($this->of)('America/North_Dakota/New_Salem'); - } - - #[\NoDiscard] - public function center(): Timezone - { - return ($this->of)('America/North_Dakota/Center'); - } -} +\class_alias(Time\Zone\America\NorthDakota::class, NorthDakota::class); diff --git a/src/Timezone/Antartica.php b/src/Timezone/Antartica.php index fc7872e..65a0c64 100644 --- a/src/Timezone/Antartica.php +++ b/src/Timezone/Antartica.php @@ -3,98 +3,6 @@ namespace Innmind\TimeContinuum\Timezone; -use Innmind\TimeContinuum\Timezone; +use Innmind\Time; -final class Antartica -{ - /** - * @param callable(non-empty-string): Timezone $of - */ - private function __construct( - private $of, - ) { - } - - /** - * @internal - * - * @param callable(non-empty-string): Timezone $of - */ - #[\NoDiscard] - public static function new(callable $of): self - { - return new self($of); - } - - #[\NoDiscard] - public function davis(): Timezone - { - return ($this->of)('Antarctica/Davis'); - } - - #[\NoDiscard] - public function palmer(): Timezone - { - return ($this->of)('Antarctica/Palmer'); - } - - #[\NoDiscard] - public function syowa(): Timezone - { - return ($this->of)('Antarctica/Syowa'); - } - - #[\NoDiscard] - public function casey(): Timezone - { - return ($this->of)('Antarctica/Casey'); - } - - #[\NoDiscard] - public function troll(): Timezone - { - return ($this->of)('Antarctica/Troll'); - } - - #[\NoDiscard] - public function mcMurdo(): Timezone - { - return ($this->of)('Antarctica/McMurdo'); - } - - #[\NoDiscard] - public function vostok(): Timezone - { - return ($this->of)('Antarctica/Vostok'); - } - - #[\NoDiscard] - public function rothera(): Timezone - { - return ($this->of)('Antarctica/Rothera'); - } - - #[\NoDiscard] - public function mawson(): Timezone - { - return ($this->of)('Antarctica/Mawson'); - } - - #[\NoDiscard] - public function macquarie(): Timezone - { - return ($this->of)('Antarctica/Macquarie'); - } - - #[\NoDiscard] - public function southPole(): Timezone - { - return ($this->of)('Antarctica/South_Pole'); - } - - #[\NoDiscard] - public function dumontDUrville(): Timezone - { - return ($this->of)('Antarctica/DumontDUrville'); - } -} +\class_alias(Time\Zone\Antartica::class, Antartica::class); diff --git a/src/Timezone/Arctic.php b/src/Timezone/Arctic.php index 8dbd5ca..fbbbe84 100644 --- a/src/Timezone/Arctic.php +++ b/src/Timezone/Arctic.php @@ -3,32 +3,6 @@ namespace Innmind\TimeContinuum\Timezone; -use Innmind\TimeContinuum\Timezone; +use Innmind\Time; -final class Arctic -{ - /** - * @param callable(non-empty-string): Timezone $of - */ - private function __construct( - private $of, - ) { - } - - /** - * @internal - * - * @param callable(non-empty-string): Timezone $of - */ - #[\NoDiscard] - public static function new(callable $of): self - { - return new self($of); - } - - #[\NoDiscard] - public function longyearbyen(): Timezone - { - return ($this->of)('Arctic/Longyearbyen'); - } -} +\class_alias(Time\Zone\Arctic::class, Arctic::class); diff --git a/src/Timezone/Asia.php b/src/Timezone/Asia.php index 0a62840..b9a4a9e 100644 --- a/src/Timezone/Asia.php +++ b/src/Timezone/Asia.php @@ -3,572 +3,6 @@ namespace Innmind\TimeContinuum\Timezone; -use Innmind\TimeContinuum\Timezone; +use Innmind\Time; -final class Asia -{ - /** - * @param callable(non-empty-string): Timezone $of - */ - private function __construct( - private $of, - ) { - } - - /** - * @internal - * - * @param callable(non-empty-string): Timezone $of - */ - #[\NoDiscard] - public static function new(callable $of): self - { - return new self($of); - } - - #[\NoDiscard] - public function manila(): Timezone - { - return ($this->of)('Asia/Manila'); - } - - #[\NoDiscard] - public function baghdad(): Timezone - { - return ($this->of)('Asia/Baghdad'); - } - - #[\NoDiscard] - public function ulaanbaatar(): Timezone - { - return ($this->of)('Asia/Ulaanbaatar'); - } - - #[\NoDiscard] - public function almaty(): Timezone - { - return ($this->of)('Asia/Almaty'); - } - - #[\NoDiscard] - public function samarkand(): Timezone - { - return ($this->of)('Asia/Samarkand'); - } - - #[\NoDiscard] - public function ustNera(): Timezone - { - return ($this->of)('Asia/Ust-Nera'); - } - - #[\NoDiscard] - public function pontianak(): Timezone - { - return ($this->of)('Asia/Pontianak'); - } - - #[\NoDiscard] - public function tehran(): Timezone - { - return ($this->of)('Asia/Tehran'); - } - - #[\NoDiscard] - public function saigon(): Timezone - { - return ($this->of)('Asia/Saigon'); - } - - #[\NoDiscard] - public function krasnoyarsk(): Timezone - { - return ($this->of)('Asia/Krasnoyarsk'); - } - - #[\NoDiscard] - public function hebron(): Timezone - { - return ($this->of)('Asia/Hebron'); - } - - #[\NoDiscard] - public function kuching(): Timezone - { - return ($this->of)('Asia/Kuching'); - } - - #[\NoDiscard] - public function katmandu(): Timezone - { - return ($this->of)('Asia/Katmandu'); - } - - #[\NoDiscard] - public function shanghai(): Timezone - { - return ($this->of)('Asia/Shanghai'); - } - - #[\NoDiscard] - public function calcutta(): Timezone - { - return ($this->of)('Asia/Calcutta'); - } - - #[\NoDiscard] - public function jayapura(): Timezone - { - return ($this->of)('Asia/Jayapura'); - } - - #[\NoDiscard] - public function muscat(): Timezone - { - return ($this->of)('Asia/Muscat'); - } - - #[\NoDiscard] - public function omsk(): Timezone - { - return ($this->of)('Asia/Omsk'); - } - - #[\NoDiscard] - public function aqtau(): Timezone - { - return ($this->of)('Asia/Aqtau'); - } - - #[\NoDiscard] - public function khandyga(): Timezone - { - return ($this->of)('Asia/Khandyga'); - } - - #[\NoDiscard] - public function riyadh(): Timezone - { - return ($this->of)('Asia/Riyadh'); - } - - #[\NoDiscard] - public function bangkok(): Timezone - { - return ($this->of)('Asia/Bangkok'); - } - - #[\NoDiscard] - public function thimphu(): Timezone - { - return ($this->of)('Asia/Thimphu'); - } - - #[\NoDiscard] - public function aden(): Timezone - { - return ($this->of)('Asia/Aden'); - } - - #[\NoDiscard] - public function yekaterinburg(): Timezone - { - return ($this->of)('Asia/Yekaterinburg'); - } - - #[\NoDiscard] - public function oral(): Timezone - { - return ($this->of)('Asia/Oral'); - } - - #[\NoDiscard] - public function novokuznetsk(): Timezone - { - return ($this->of)('Asia/Novokuznetsk'); - } - - #[\NoDiscard] - public function bishkek(): Timezone - { - return ($this->of)('Asia/Bishkek'); - } - - #[\NoDiscard] - public function macau(): Timezone - { - return ($this->of)('Asia/Macau'); - } - - #[\NoDiscard] - public function qyzylorda(): Timezone - { - return ($this->of)('Asia/Qyzylorda'); - } - - #[\NoDiscard] - public function seoul(): Timezone - { - return ($this->of)('Asia/Seoul'); - } - - #[\NoDiscard] - public function irkutsk(): Timezone - { - return ($this->of)('Asia/Irkutsk'); - } - - #[\NoDiscard] - public function aqtobe(): Timezone - { - return ($this->of)('Asia/Aqtobe'); - } - - #[\NoDiscard] - public function chongqing(): Timezone - { - return ($this->of)('Asia/Chongqing'); - } - - #[\NoDiscard] - public function kabul(): Timezone - { - return ($this->of)('Asia/Kabul'); - } - - #[\NoDiscard] - public function thimbu(): Timezone - { - return ($this->of)('Asia/Thimbu'); - } - - #[\NoDiscard] - public function karachi(): Timezone - { - return ($this->of)('Asia/Karachi'); - } - - #[\NoDiscard] - public function jakarta(): Timezone - { - return ($this->of)('Asia/Jakarta'); - } - - #[\NoDiscard] - public function harbin(): Timezone - { - return ($this->of)('Asia/Harbin'); - } - - #[\NoDiscard] - public function novosibirsk(): Timezone - { - return ($this->of)('Asia/Novosibirsk'); - } - - #[\NoDiscard] - public function dili(): Timezone - { - return ($this->of)('Asia/Dili'); - } - - #[\NoDiscard] - public function colombo(): Timezone - { - return ($this->of)('Asia/Colombo'); - } - - #[\NoDiscard] - public function ashkhabad(): Timezone - { - return ($this->of)('Asia/Ashkhabad'); - } - - #[\NoDiscard] - public function dacca(): Timezone - { - return ($this->of)('Asia/Dacca'); - } - - #[\NoDiscard] - public function ashgabat(): Timezone - { - return ($this->of)('Asia/Ashgabat'); - } - - #[\NoDiscard] - public function ujungPandang(): Timezone - { - return ($this->of)('Asia/Ujung_Pandang'); - } - - #[\NoDiscard] - public function qatar(): Timezone - { - return ($this->of)('Asia/Qatar'); - } - - #[\NoDiscard] - public function tokyo(): Timezone - { - return ($this->of)('Asia/Tokyo'); - } - - #[\NoDiscard] - public function macao(): Timezone - { - return ($this->of)('Asia/Macao'); - } - - #[\NoDiscard] - public function tashkent(): Timezone - { - return ($this->of)('Asia/Tashkent'); - } - - #[\NoDiscard] - public function baku(): Timezone - { - return ($this->of)('Asia/Baku'); - } - - #[\NoDiscard] - public function pyongyang(): Timezone - { - return ($this->of)('Asia/Pyongyang'); - } - - #[\NoDiscard] - public function tbilisi(): Timezone - { - return ($this->of)('Asia/Tbilisi'); - } - - #[\NoDiscard] - public function amman(): Timezone - { - return ($this->of)('Asia/Amman'); - } - - #[\NoDiscard] - public function vladivostok(): Timezone - { - return ($this->of)('Asia/Vladivostok'); - } - - #[\NoDiscard] - public function damascus(): Timezone - { - return ($this->of)('Asia/Damascus'); - } - - #[\NoDiscard] - public function bahrain(): Timezone - { - return ($this->of)('Asia/Bahrain'); - } - - #[\NoDiscard] - public function vientiane(): Timezone - { - return ($this->of)('Asia/Vientiane'); - } - - #[\NoDiscard] - public function hovd(): Timezone - { - return ($this->of)('Asia/Hovd'); - } - - #[\NoDiscard] - public function kuwait(): Timezone - { - return ($this->of)('Asia/Kuwait'); - } - - #[\NoDiscard] - public function magadan(): Timezone - { - return ($this->of)('Asia/Magadan'); - } - - #[\NoDiscard] - public function ulanBator(): Timezone - { - return ($this->of)('Asia/Ulan_Bator'); - } - - #[\NoDiscard] - public function nicosia(): Timezone - { - return ($this->of)('Asia/Nicosia'); - } - - #[\NoDiscard] - public function telAviv(): Timezone - { - return ($this->of)('Asia/Tel_Aviv'); - } - - #[\NoDiscard] - public function choibalsan(): Timezone - { - return ($this->of)('Asia/Choibalsan'); - } - - #[\NoDiscard] - public function brunei(): Timezone - { - return ($this->of)('Asia/Brunei'); - } - - #[\NoDiscard] - public function kualaLumpur(): Timezone - { - return ($this->of)('Asia/Kuala_Lumpur'); - } - - #[\NoDiscard] - public function kathmandu(): Timezone - { - return ($this->of)('Asia/Kathmandu'); - } - - #[\NoDiscard] - public function srednekolymsk(): Timezone - { - return ($this->of)('Asia/Srednekolymsk'); - } - - #[\NoDiscard] - public function dubai(): Timezone - { - return ($this->of)('Asia/Dubai'); - } - - #[\NoDiscard] - public function yakutsk(): Timezone - { - return ($this->of)('Asia/Yakutsk'); - } - - #[\NoDiscard] - public function beirut(): Timezone - { - return ($this->of)('Asia/Beirut'); - } - - #[\NoDiscard] - public function gaza(): Timezone - { - return ($this->of)('Asia/Gaza'); - } - - #[\NoDiscard] - public function singapore(): Timezone - { - return ($this->of)('Asia/Singapore'); - } - - #[\NoDiscard] - public function rangoon(): Timezone - { - return ($this->of)('Asia/Rangoon'); - } - - #[\NoDiscard] - public function sakhalin(): Timezone - { - return ($this->of)('Asia/Sakhalin'); - } - - #[\NoDiscard] - public function phnomPenh(): Timezone - { - return ($this->of)('Asia/Phnom_Penh'); - } - - #[\NoDiscard] - public function kamchatka(): Timezone - { - return ($this->of)('Asia/Kamchatka'); - } - - #[\NoDiscard] - public function yerevan(): Timezone - { - return ($this->of)('Asia/Yerevan'); - } - - #[\NoDiscard] - public function chungking(): Timezone - { - return ($this->of)('Asia/Chungking'); - } - - #[\NoDiscard] - public function hoChiMinh(): Timezone - { - return ($this->of)('Asia/Ho_Chi_Minh'); - } - - #[\NoDiscard] - public function chita(): Timezone - { - return ($this->of)('Asia/Chita'); - } - - #[\NoDiscard] - public function istanbul(): Timezone - { - return ($this->of)('Asia/Istanbul'); - } - - #[\NoDiscard] - public function hongKong(): Timezone - { - return ($this->of)('Asia/Hong_Kong'); - } - - #[\NoDiscard] - public function dhaka(): Timezone - { - return ($this->of)('Asia/Dhaka'); - } - - #[\NoDiscard] - public function jerusalem(): Timezone - { - return ($this->of)('Asia/Jerusalem'); - } - - #[\NoDiscard] - public function makassar(): Timezone - { - return ($this->of)('Asia/Makassar'); - } - - #[\NoDiscard] - public function kolkata(): Timezone - { - return ($this->of)('Asia/Kolkata'); - } - - #[\NoDiscard] - public function taipei(): Timezone - { - return ($this->of)('Asia/Taipei'); - } - - #[\NoDiscard] - public function dushanbe(): Timezone - { - return ($this->of)('Asia/Dushanbe'); - } - - #[\NoDiscard] - public function anadyr(): Timezone - { - return ($this->of)('Asia/Anadyr'); - } -} +\class_alias(Time\Zone\Asia::class, Asia::class); diff --git a/src/Timezone/Atlantic.php b/src/Timezone/Atlantic.php index 68c9e5c..21bc063 100644 --- a/src/Timezone/Atlantic.php +++ b/src/Timezone/Atlantic.php @@ -3,98 +3,6 @@ namespace Innmind\TimeContinuum\Timezone; -use Innmind\TimeContinuum\Timezone; +use Innmind\Time; -final class Atlantic -{ - /** - * @param callable(non-empty-string): Timezone $of - */ - private function __construct( - private $of, - ) { - } - - /** - * @internal - * - * @param callable(non-empty-string): Timezone $of - */ - #[\NoDiscard] - public static function new(callable $of): self - { - return new self($of); - } - - #[\NoDiscard] - public function faroe(): Timezone - { - return ($this->of)('Atlantic/Faroe'); - } - - #[\NoDiscard] - public function southGeorgia(): Timezone - { - return ($this->of)('Atlantic/South_Georgia'); - } - - #[\NoDiscard] - public function capeVerde(): Timezone - { - return ($this->of)('Atlantic/Cape_Verde'); - } - - #[\NoDiscard] - public function faeroe(): Timezone - { - return ($this->of)('Atlantic/Faeroe'); - } - - #[\NoDiscard] - public function bermuda(): Timezone - { - return ($this->of)('Atlantic/Bermuda'); - } - - #[\NoDiscard] - public function janMayen(): Timezone - { - return ($this->of)('Atlantic/Jan_Mayen'); - } - - #[\NoDiscard] - public function reykjavik(): Timezone - { - return ($this->of)('Atlantic/Reykjavik'); - } - - #[\NoDiscard] - public function saintHelena(): Timezone - { - return ($this->of)('Atlantic/St_Helena'); - } - - #[\NoDiscard] - public function canary(): Timezone - { - return ($this->of)('Atlantic/Canary'); - } - - #[\NoDiscard] - public function madeira(): Timezone - { - return ($this->of)('Atlantic/Madeira'); - } - - #[\NoDiscard] - public function azores(): Timezone - { - return ($this->of)('Atlantic/Azores'); - } - - #[\NoDiscard] - public function stanley(): Timezone - { - return ($this->of)('Atlantic/Stanley'); - } -} +\class_alias(Time\Zone\Atlantic::class, Atlantic::class); diff --git a/src/Timezone/Australia.php b/src/Timezone/Australia.php index e1ce0db..5770ab3 100644 --- a/src/Timezone/Australia.php +++ b/src/Timezone/Australia.php @@ -3,158 +3,6 @@ namespace Innmind\TimeContinuum\Timezone; -use Innmind\TimeContinuum\Timezone; +use Innmind\Time; -final class Australia -{ - /** - * @param callable(non-empty-string): Timezone $of - */ - private function __construct( - private $of, - ) { - } - - /** - * @internal - * - * @param callable(non-empty-string): Timezone $of - */ - #[\NoDiscard] - public static function new(callable $of): self - { - return new self($of); - } - - #[\NoDiscard] - public function lindeman(): Timezone - { - return ($this->of)('Australia/Lindeman'); - } - - #[\NoDiscard] - public function currie(): Timezone - { - return ($this->of)('Australia/Currie'); - } - - #[\NoDiscard] - public function victoria(): Timezone - { - return ($this->of)('Australia/Victoria'); - } - - #[\NoDiscard] - public function adelaide(): Timezone - { - return ($this->of)('Australia/Adelaide'); - } - - #[\NoDiscard] - public function perth(): Timezone - { - return ($this->of)('Australia/Perth'); - } - - #[\NoDiscard] - public function brisbane(): Timezone - { - return ($this->of)('Australia/Brisbane'); - } - - #[\NoDiscard] - public function west(): Timezone - { - return ($this->of)('Australia/West'); - } - - #[\NoDiscard] - public function australianCapitalTerritory(): Timezone - { - return ($this->of)('Australia/ACT'); - } - - #[\NoDiscard] - public function north(): Timezone - { - return ($this->of)('Australia/North'); - } - - #[\NoDiscard] - public function eucla(): Timezone - { - return ($this->of)('Australia/Eucla'); - } - - #[\NoDiscard] - public function lordeHoweIsland(): Timezone - { - return ($this->of)('Australia/LHI'); - } - - #[\NoDiscard] - public function newSouthWales(): Timezone - { - return ($this->of)('Australia/NSW'); - } - - #[\NoDiscard] - public function queensland(): Timezone - { - return ($this->of)('Australia/Queensland'); - } - - #[\NoDiscard] - public function south(): Timezone - { - return ($this->of)('Australia/South'); - } - - #[\NoDiscard] - public function melbourne(): Timezone - { - return ($this->of)('Australia/Melbourne'); - } - - #[\NoDiscard] - public function yancowinna(): Timezone - { - return ($this->of)('Australia/Yancowinna'); - } - - #[\NoDiscard] - public function canberra(): Timezone - { - return ($this->of)('Australia/Canberra'); - } - - #[\NoDiscard] - public function sydney(): Timezone - { - return ($this->of)('Australia/Sydney'); - } - - #[\NoDiscard] - public function darwin(): Timezone - { - return ($this->of)('Australia/Darwin'); - } - - #[\NoDiscard] - public function hobart(): Timezone - { - return ($this->of)('Australia/Hobart'); - } - - #[\NoDiscard] - public function brokenHill(): Timezone - { - return ($this->of)('Australia/Broken_Hill'); - } - - #[\NoDiscard] - public function tasmania(): Timezone - { - return ($this->of)('Australia/Tasmania'); - } -} +\class_alias(Time\Zone\Australia::class, Australia::class); diff --git a/src/Timezone/Europe.php b/src/Timezone/Europe.php index ebf0be3..f9db56b 100644 --- a/src/Timezone/Europe.php +++ b/src/Timezone/Europe.php @@ -3,380 +3,6 @@ namespace Innmind\TimeContinuum\Timezone; -use Innmind\TimeContinuum\Timezone; +use Innmind\Time; -final class Europe -{ - /** - * @param callable(non-empty-string): Timezone $of - */ - private function __construct( - private $of, - ) { - } - - /** - * @internal - * - * @param callable(non-empty-string): Timezone $of - */ - #[\NoDiscard] - public static function new(callable $of): self - { - return new self($of); - } - - #[\NoDiscard] - public function uzhgorod(): Timezone - { - return ($this->of)('Europe/Uzhgorod'); - } - - #[\NoDiscard] - public function riga(): Timezone - { - return ($this->of)('Europe/Riga'); - } - - #[\NoDiscard] - public function paris(): Timezone - { - return ($this->of)('Europe/Paris'); - } - - #[\NoDiscard] - public function guernsey(): Timezone - { - return ($this->of)('Europe/Guernsey'); - } - - #[\NoDiscard] - public function samara(): Timezone - { - return ($this->of)('Europe/Samara'); - } - - #[\NoDiscard] - public function athens(): Timezone - { - return ($this->of)('Europe/Athens'); - } - - #[\NoDiscard] - public function tirane(): Timezone - { - return ($this->of)('Europe/Tirane'); - } - - #[\NoDiscard] - public function london(): Timezone - { - return ($this->of)('Europe/London'); - } - - #[\NoDiscard] - public function helsinki(): Timezone - { - return ($this->of)('Europe/Helsinki'); - } - - #[\NoDiscard] - public function oslo(): Timezone - { - return ($this->of)('Europe/Oslo'); - } - - #[\NoDiscard] - public function podgorica(): Timezone - { - return ($this->of)('Europe/Podgorica'); - } - - #[\NoDiscard] - public function minsk(): Timezone - { - return ($this->of)('Europe/Minsk'); - } - - #[\NoDiscard] - public function monaco(): Timezone - { - return ($this->of)('Europe/Monaco'); - } - - #[\NoDiscard] - public function lisbon(): Timezone - { - return ($this->of)('Europe/Lisbon'); - } - - #[\NoDiscard] - public function tallinn(): Timezone - { - return ($this->of)('Europe/Tallinn'); - } - - #[\NoDiscard] - public function berlin(): Timezone - { - return ($this->of)('Europe/Berlin'); - } - - #[\NoDiscard] - public function gibraltar(): Timezone - { - return ($this->of)('Europe/Gibraltar'); - } - - #[\NoDiscard] - public function prague(): Timezone - { - return ($this->of)('Europe/Prague'); - } - - #[\NoDiscard] - public function stockholm(): Timezone - { - return ($this->of)('Europe/Stockholm'); - } - - #[\NoDiscard] - public function moscow(): Timezone - { - return ($this->of)('Europe/Moscow'); - } - - #[\NoDiscard] - public function bucharest(): Timezone - { - return ($this->of)('Europe/Bucharest'); - } - - #[\NoDiscard] - public function andorra(): Timezone - { - return ($this->of)('Europe/Andorra'); - } - - #[\NoDiscard] - public function vilnius(): Timezone - { - return ($this->of)('Europe/Vilnius'); - } - - #[\NoDiscard] - public function rome(): Timezone - { - return ($this->of)('Europe/Rome'); - } - - #[\NoDiscard] - public function kiev(): Timezone - { - return ($this->of)('Europe/Kiev'); - } - - #[\NoDiscard] - public function copenhagen(): Timezone - { - return ($this->of)('Europe/Copenhagen'); - } - - #[\NoDiscard] - public function belgrade(): Timezone - { - return ($this->of)('Europe/Belgrade'); - } - - #[\NoDiscard] - public function isleOfMan(): Timezone - { - return ($this->of)('Europe/Isle_of_Man'); - } - - #[\NoDiscard] - public function budapest(): Timezone - { - return ($this->of)('Europe/Budapest'); - } - - #[\NoDiscard] - public function tiraspol(): Timezone - { - return ($this->of)('Europe/Tiraspol'); - } - - #[\NoDiscard] - public function vaduz(): Timezone - { - return ($this->of)('Europe/Vaduz'); - } - - #[\NoDiscard] - public function sarajevo(): Timezone - { - return ($this->of)('Europe/Sarajevo'); - } - - #[\NoDiscard] - public function amsterdam(): Timezone - { - return ($this->of)('Europe/Amsterdam'); - } - - #[\NoDiscard] - public function mariehamn(): Timezone - { - return ($this->of)('Europe/Mariehamn'); - } - - #[\NoDiscard] - public function skopje(): Timezone - { - return ($this->of)('Europe/Skopje'); - } - - #[\NoDiscard] - public function kaliningrad(): Timezone - { - return ($this->of)('Europe/Kaliningrad'); - } - - #[\NoDiscard] - public function bratislava(): Timezone - { - return ($this->of)('Europe/Bratislava'); - } - - #[\NoDiscard] - public function sanMarino(): Timezone - { - return ($this->of)('Europe/San_Marino'); - } - - #[\NoDiscard] - public function busingen(): Timezone - { - return ($this->of)('Europe/Busingen'); - } - - #[\NoDiscard] - public function zaporozhye(): Timezone - { - return ($this->of)('Europe/Zaporozhye'); - } - - #[\NoDiscard] - public function chisinau(): Timezone - { - return ($this->of)('Europe/Chisinau'); - } - - #[\NoDiscard] - public function brussels(): Timezone - { - return ($this->of)('Europe/Brussels'); - } - - #[\NoDiscard] - public function luxembourg(): Timezone - { - return ($this->of)('Europe/Luxembourg'); - } - - #[\NoDiscard] - public function belfast(): Timezone - { - return ($this->of)('Europe/Belfast'); - } - - #[\NoDiscard] - public function vienna(): Timezone - { - return ($this->of)('Europe/Vienna'); - } - - #[\NoDiscard] - public function ljubljana(): Timezone - { - return ($this->of)('Europe/Ljubljana'); - } - - #[\NoDiscard] - public function simferopol(): Timezone - { - return ($this->of)('Europe/Simferopol'); - } - - #[\NoDiscard] - public function dublin(): Timezone - { - return ($this->of)('Europe/Dublin'); - } - - #[\NoDiscard] - public function nicosia(): Timezone - { - return ($this->of)('Europe/Nicosia'); - } - - #[\NoDiscard] - public function zagreb(): Timezone - { - return ($this->of)('Europe/Zagreb'); - } - - #[\NoDiscard] - public function jersey(): Timezone - { - return ($this->of)('Europe/Jersey'); - } - - #[\NoDiscard] - public function madrid(): Timezone - { - return ($this->of)('Europe/Madrid'); - } - - #[\NoDiscard] - public function vatican(): Timezone - { - return ($this->of)('Europe/Vatican'); - } - - #[\NoDiscard] - public function istanbul(): Timezone - { - return ($this->of)('Europe/Istanbul'); - } - - #[\NoDiscard] - public function zurich(): Timezone - { - return ($this->of)('Europe/Zurich'); - } - - #[\NoDiscard] - public function sofia(): Timezone - { - return ($this->of)('Europe/Sofia'); - } - - #[\NoDiscard] - public function volgograd(): Timezone - { - return ($this->of)('Europe/Volgograd'); - } - - #[\NoDiscard] - public function malta(): Timezone - { - return ($this->of)('Europe/Malta'); - } - - #[\NoDiscard] - public function warsaw(): Timezone - { - return ($this->of)('Europe/Warsaw'); - } -} +\class_alias(Time\Zone\Europe::class, Europe::class); diff --git a/src/Timezone/Indian.php b/src/Timezone/Indian.php index 5a71e06..33b5f84 100644 --- a/src/Timezone/Indian.php +++ b/src/Timezone/Indian.php @@ -3,92 +3,6 @@ namespace Innmind\TimeContinuum\Timezone; -use Innmind\TimeContinuum\Timezone; +use Innmind\Time; -final class Indian -{ - /** - * @param callable(non-empty-string): Timezone $of - */ - private function __construct( - private $of, - ) { - } - - /** - * @internal - * - * @param callable(non-empty-string): Timezone $of - */ - #[\NoDiscard] - public static function new(callable $of): self - { - return new self($of); - } - - #[\NoDiscard] - public function cocos(): Timezone - { - return ($this->of)('Indian/Cocos'); - } - - #[\NoDiscard] - public function antananarivo(): Timezone - { - return ($this->of)('Indian/Antananarivo'); - } - - #[\NoDiscard] - public function reunion(): Timezone - { - return ($this->of)('Indian/Reunion'); - } - - #[\NoDiscard] - public function chagos(): Timezone - { - return ($this->of)('Indian/Chagos'); - } - - #[\NoDiscard] - public function comoro(): Timezone - { - return ($this->of)('Indian/Comoro'); - } - - #[\NoDiscard] - public function mayotte(): Timezone - { - return ($this->of)('Indian/Mayotte'); - } - - #[\NoDiscard] - public function maldives(): Timezone - { - return ($this->of)('Indian/Maldives'); - } - - #[\NoDiscard] - public function mauritius(): Timezone - { - return ($this->of)('Indian/Mauritius'); - } - - #[\NoDiscard] - public function mahe(): Timezone - { - return ($this->of)('Indian/Mahe'); - } - - #[\NoDiscard] - public function kerguelen(): Timezone - { - return ($this->of)('Indian/Kerguelen'); - } - - #[\NoDiscard] - public function christmas(): Timezone - { - return ($this->of)('Indian/Christmas'); - } -} +\class_alias(Time\Zone\Indian::class, Indian::class); diff --git a/src/Timezone/Pacific.php b/src/Timezone/Pacific.php index 04ca1b3..8ea9f0a 100644 --- a/src/Timezone/Pacific.php +++ b/src/Timezone/Pacific.php @@ -3,278 +3,6 @@ namespace Innmind\TimeContinuum\Timezone; -use Innmind\TimeContinuum\Timezone; +use Innmind\Time; -final class Pacific -{ - /** - * @param callable(non-empty-string): Timezone $of - */ - private function __construct( - private $of, - ) { - } - - /** - * @internal - * - * @param callable(non-empty-string): Timezone $of - */ - #[\NoDiscard] - public static function new(callable $of): self - { - return new self($of); - } - - #[\NoDiscard] - public function kosrae(): Timezone - { - return ($this->of)('Pacific/Kosrae'); - } - - #[\NoDiscard] - public function enderbury(): Timezone - { - return ($this->of)('Pacific/Enderbury'); - } - - #[\NoDiscard] - public function apia(): Timezone - { - return ($this->of)('Pacific/Apia'); - } - - #[\NoDiscard] - public function noumea(): Timezone - { - return ($this->of)('Pacific/Noumea'); - } - - #[\NoDiscard] - public function chatham(): Timezone - { - return ($this->of)('Pacific/Chatham'); - } - - #[\NoDiscard] - public function wake(): Timezone - { - return ($this->of)('Pacific/Wake'); - } - - #[\NoDiscard] - public function wallis(): Timezone - { - return ($this->of)('Pacific/Wallis'); - } - - #[\NoDiscard] - public function johnston(): Timezone - { - return ($this->of)('Pacific/Johnston'); - } - - #[\NoDiscard] - public function saipan(): Timezone - { - return ($this->of)('Pacific/Saipan'); - } - - #[\NoDiscard] - public function tarawa(): Timezone - { - return ($this->of)('Pacific/Tarawa'); - } - - #[\NoDiscard] - public function pitcairn(): Timezone - { - return ($this->of)('Pacific/Pitcairn'); - } - - #[\NoDiscard] - public function niue(): Timezone - { - return ($this->of)('Pacific/Niue'); - } - - #[\NoDiscard] - public function ponape(): Timezone - { - return ($this->of)('Pacific/Ponape'); - } - - #[\NoDiscard] - public function guam(): Timezone - { - return ($this->of)('Pacific/Guam'); - } - - #[\NoDiscard] - public function auckland(): Timezone - { - return ($this->of)('Pacific/Auckland'); - } - - #[\NoDiscard] - public function pagoPago(): Timezone - { - return ($this->of)('Pacific/Pago_Pago'); - } - - #[\NoDiscard] - public function chuuk(): Timezone - { - return ($this->of)('Pacific/Chuuk'); - } - - #[\NoDiscard] - public function kwajalein(): Timezone - { - return ($this->of)('Pacific/Kwajalein'); - } - - #[\NoDiscard] - public function fakaofo(): Timezone - { - return ($this->of)('Pacific/Fakaofo'); - } - - #[\NoDiscard] - public function majuro(): Timezone - { - return ($this->of)('Pacific/Majuro'); - } - - #[\NoDiscard] - public function guadalcanal(): Timezone - { - return ($this->of)('Pacific/Guadalcanal'); - } - - #[\NoDiscard] - public function efate(): Timezone - { - return ($this->of)('Pacific/Efate'); - } - - #[\NoDiscard] - public function tongatapu(): Timezone - { - return ($this->of)('Pacific/Tongatapu'); - } - - #[\NoDiscard] - public function pohnpei(): Timezone - { - return ($this->of)('Pacific/Pohnpei'); - } - - #[\NoDiscard] - public function honolulu(): Timezone - { - return ($this->of)('Pacific/Honolulu'); - } - - #[\NoDiscard] - public function bougainville(): Timezone - { - return ($this->of)('Pacific/Bougainville'); - } - - #[\NoDiscard] - public function galapagos(): Timezone - { - return ($this->of)('Pacific/Galapagos'); - } - - #[\NoDiscard] - public function gambier(): Timezone - { - return ($this->of)('Pacific/Gambier'); - } - - #[\NoDiscard] - public function palau(): Timezone - { - return ($this->of)('Pacific/Palau'); - } - - #[\NoDiscard] - public function midway(): Timezone - { - return ($this->of)('Pacific/Midway'); - } - - #[\NoDiscard] - public function marquesas(): Timezone - { - return ($this->of)('Pacific/Marquesas'); - } - - #[\NoDiscard] - public function funafuti(): Timezone - { - return ($this->of)('Pacific/Funafuti'); - } - - #[\NoDiscard] - public function norfolk(): Timezone - { - return ($this->of)('Pacific/Norfolk'); - } - - #[\NoDiscard] - public function portMoresby(): Timezone - { - return ($this->of)('Pacific/Port_Moresby'); - } - - #[\NoDiscard] - public function tahiti(): Timezone - { - return ($this->of)('Pacific/Tahiti'); - } - - #[\NoDiscard] - public function fiji(): Timezone - { - return ($this->of)('Pacific/Fiji'); - } - - #[\NoDiscard] - public function kiritimati(): Timezone - { - return ($this->of)('Pacific/Kiritimati'); - } - - #[\NoDiscard] - public function truk(): Timezone - { - return ($this->of)('Pacific/Truk'); - } - - #[\NoDiscard] - public function easter(): Timezone - { - return ($this->of)('Pacific/Easter'); - } - - #[\NoDiscard] - public function rarotonga(): Timezone - { - return ($this->of)('Pacific/Rarotonga'); - } - - #[\NoDiscard] - public function yap(): Timezone - { - return ($this->of)('Pacific/Yap'); - } - - #[\NoDiscard] - public function nauru(): Timezone - { - return ($this->of)('Pacific/Nauru'); - } -} +\class_alias(Time\Zone\Pacific::class, Pacific::class); diff --git a/src/Timezones.php b/src/Timezones.php index 5c8f243..61e4172 100644 --- a/src/Timezones.php +++ b/src/Timezones.php @@ -3,103 +3,6 @@ namespace Innmind\TimeContinuum; -use Innmind\TimeContinuum\Timezone\{ - Africa, - America, - Antartica, - Arctic, - Asia, - Atlantic, - Australia, - Europe, - Indian, - Pacific, -}; +use Innmind\Time; -final class Timezones -{ - /** - * @param callable(non-empty-string): Timezone $of - */ - private function __construct( - private $of, - ) { - } - - /** - * @internal - * - * @param callable(non-empty-string): Timezone $of - */ - #[\NoDiscard] - public static function new(callable $of): self - { - return new self($of); - } - - #[\NoDiscard] - public function utc(): Timezone - { - return ($this->of)('UTC'); - } - - #[\NoDiscard] - public function africa(): Africa - { - return Africa::new($this->of); - } - - #[\NoDiscard] - public function america(): America - { - return America::new($this->of); - } - - #[\NoDiscard] - public function antartica(): Antartica - { - return Antartica::new($this->of); - } - - #[\NoDiscard] - public function arctic(): Arctic - { - return Arctic::new($this->of); - } - - #[\NoDiscard] - public function asia(): Asia - { - return Asia::new($this->of); - } - - #[\NoDiscard] - public function atlantic(): Atlantic - { - return Atlantic::new($this->of); - } - - #[\NoDiscard] - public function australia(): Australia - { - return Australia::new($this->of); - } - - #[\NoDiscard] - public function europe(): Europe - { - return Europe::new($this->of); - } - - #[\NoDiscard] - public function indian(): Indian - { - return Indian::new($this->of); - } - - #[\NoDiscard] - public function pacific(): Pacific - { - return Pacific::new($this->of); - } -} +\class_alias(Time\Zones::class, Timezones::class); diff --git a/tests/PointInTime/HighResolutionTest.php b/tests/PointInTime/HighResolutionTest.php deleted file mode 100644 index 23cc0cc..0000000 --- a/tests/PointInTime/HighResolutionTest.php +++ /dev/null @@ -1,75 +0,0 @@ -elapsedSince($started)->asPeriod(); - $this->assertSame(0, $period->seconds()); - $this->assertSame(1, $period->milliseconds()); - $this->assertSame(0, $period->microseconds()); - } - - public function testDiffLessThanOneSecondButNotInSameSecond() - { - $started = HighResolution::of(1, 2_000_000); - $end = HighResolution::of(2, 1_000_000); - - $period = $end->elapsedSince($started)->asPeriod(); - $this->assertSame(0, $period->seconds()); - $this->assertSame(999, $period->milliseconds()); - $this->assertSame(0, $period->microseconds()); - } - - public function testDiffMoreThanOneSecond() - { - $started = HighResolution::of(1, 2_000_000); - $end = HighResolution::of(2, 3_000_000); - - $period = $end->elapsedSince($started)->asPeriod(); - $this->assertSame(1, $period->seconds()); - $this->assertSame(1, $period->milliseconds()); - $this->assertSame(0, $period->microseconds()); - } - - public function testDiffMoreThanMultipleSeconds() - { - $started = HighResolution::of(1, 2_000_000); - $end = HighResolution::of(3, 3_000_000); - - $period = $end->elapsedSince($started)->asPeriod(); - $this->assertSame(2, $period->seconds()); - $this->assertSame(1, $period->milliseconds()); - $this->assertSame(0, $period->microseconds()); - } - - public function testDiffMoreThanMultipleSeconds2() - { - $started = HighResolution::of(1, 2_000_000); - $end = HighResolution::of(3, 1_000_000); - - $period = $end->elapsedSince($started)->asPeriod(); - $this->assertSame(1, $period->seconds()); - $this->assertSame(999, $period->milliseconds()); - $this->assertSame(0, $period->microseconds()); - } - - public function test1() - { - $started = HighResolution::of(684461, 547614375); - $end = HighResolution::of(684462, 602541); - - $period = $end->elapsedSince($started)->asPeriod(); - $this->assertSame(452, $period->milliseconds()); - $this->assertSame(988, $period->microseconds()); - } -}