Метод withTimeZone
Метод withTimeZone класса Clock создаёт и возвращает новый объект часов,
который работает в заданном часовом поясе. Исходный объект при этом не изменяется.
Первым параметром передаётся часовой пояс в виде объекта DateTimeZone.
Полученные часы можно использовать там же, где и обычный Clock:
для получения текущего времени через метод now.
Синтаксис
public function withTimeZone(DateTimeZone $timezone): static
Пример
Давайте создадим часы и переведём их в часовой пояс 'Europe/Moscow':
<?php
namespace AppService;
use SymfonyComponentClockClock;
class ClockService
{
public function getMoscowTime(): string
{
$clock = new Clock();
$moscowClock = $clock->withTimeZone(new DateTimeZone('Europe/Moscow'));
return $moscowClock->now()->format('Y-m-d H:i:s');
}
}
?>
Результат выполнения кода:
"2024-01-01 15:30:00"
Пример
Давайте сравним время в двух разных часовых поясах:
<?php
namespace AppService;
use SymfonyComponentClockClock;
class ClockService
{
public function compareTimeZones(): array
{
$clock = new Clock();
$utcClock = $clock->withTimeZone(new DateTimeZone('UTC'));
$tokyoClock = $clock->withTimeZone(new DateTimeZone('Asia/Tokyo'));
return [
'utc' => $utcClock->now()->format('H:i'),
'tokyo' => $tokyoClock->now()->format('H:i'),
];
}
}
?>
Результат выполнения кода:
["utc" => "12:00", "tokyo" => "21:00"]
Пример
Давайте используем withTimeZone вместе с DatePoint для вывода даты в нужном поясе:
<?php
namespace AppService;
use SymfonyComponentClockClock;
use SymfonyComponentClockDatePoint;
class ClockService
{
public function getDatePoint(): DatePoint
{
$clock = new Clock();
$newYorkClock = $clock->withTimeZone(new DateTimeZone('America/New_York'));
return DatePoint::createFromInterface($newYorkClock->now());
}
}
?>
Результат выполнения кода:
DatePoint {#1
+date: "2024-01-01 10:30:00.000000"
+timezone_type: 3
+timezone: "America/New_York"
}