diff --git a/src/DatetimeFactory.php b/src/DatetimeFactory.php index bcf6435..8a72e24 100644 --- a/src/DatetimeFactory.php +++ b/src/DatetimeFactory.php @@ -4,6 +4,7 @@ namespace Mistrfilda\Datetime; +use Mistrfilda\Datetime\Timezone\Timezone; use Mistrfilda\Datetime\Types\DatetimeImmutable; use Throwable; @@ -17,14 +18,14 @@ class DatetimeFactory public static function createFromFormat( string $datetime, - string $mysqlDatetimeFormat = self::DEFAULT_MYSQL_DATETIME_FORMAT + string $format = self::DEFAULT_MYSQL_DATETIME_FORMAT ): DateTimeImmutable { - $parsedDatetime = DateTimeImmutable::createFromFormat($mysqlDatetimeFormat, $datetime); + $parsedDatetime = DateTimeImmutable::createFromFormat($format, $datetime); if ($parsedDatetime === false) { throw new DatetimeException('Can\'t create datetime from specified value and format'); } - return new DatetimeImmutable('@' . $parsedDatetime->getTimestamp()); + return (new DatetimeImmutable('@' . $parsedDatetime->getTimestamp()))->setTimezone($parsedDatetime->getTimezone()); } public function createNow(): DatetimeImmutable @@ -37,10 +38,10 @@ public function createToday(): DateTimeImmutable return (new DateTimeImmutable())->setTime(0, 0, 0); } - public function createFromTimestamp(int $timestamp): DateTimeImmutable + public function createFromTimestamp(int $timestamp, string $timezone = Timezone::UTC): DateTimeImmutable { try { - return new DateTimeImmutable('@' . $timestamp); + return (new DateTimeImmutable('@' . $timestamp))->setTimezone(Timezone::createTimezone($timezone)); } catch (Throwable $e) { throw new DatetimeException($e->getMessage(), $e->getCode(), $e); } @@ -55,6 +56,6 @@ public function createDatetimeFromMysqlFormat( throw new DatetimeException('Can\'t create datetime from specified value and format'); } - return new DatetimeImmutable('@' . $parsedDatetime->getTimestamp()); + return (new DatetimeImmutable('@' . $parsedDatetime->getTimestamp()))->setTimezone($parsedDatetime->getTimezone()); } } diff --git a/src/Timezone/Timezone.php b/src/Timezone/Timezone.php new file mode 100644 index 0000000..66c0402 --- /dev/null +++ b/src/Timezone/Timezone.php @@ -0,0 +1,29 @@ +getName() + ); + + self::assertSame( + 'UTC', + Timezone::getUTCTimezone()->getName() + ); + } +} diff --git a/tests/UpdatedTestCase.php b/tests/UpdatedTestCase.php index 52d6145..c5bc1d8 100644 --- a/tests/UpdatedTestCase.php +++ b/tests/UpdatedTestCase.php @@ -63,5 +63,6 @@ protected static function assertDatetimeImmutable( DateTimeImmutable $actual ): void { self::assertSame($expected->getTimestamp(), $actual->getTimestamp()); + self::assertSame($expected->getTimezone()->getName(), $actual->getTimezone()->getName()); } }