Все это делается на уровне приложения. Это архитектурная проблема..
1. У вас в каждом модуле должен быть конфиг или место откуда вы будет забирать часовой пояс
Например
src/modules/user
- timezone.ini
src/modules/customers
- timezone.ini
src/modules/admin
- timezone.ini
2. У Вас должна быть точка входа в модуль, которая обращается ко всем внутренностям компонента.
Например, если модули не вызываются напрямую, а используются для взаимодействия во всей системе... то я сделал бы Dependency Injection Container
src/modules/user/
- DIC.php
- ...
- UserController.php
- timezone.ini
src/
- TimeZone.php
# timezone.ini
timezone=Europe/Kiev
# TimeZone.php
class TimeZone() {
private $tz;
public __constructor($tz) {
$this->tz = $tz;
}
public function getDateTime() {
$currentDate = (new \DateTime())->format('Y-m-d H:i:s');
$tz = new DateTimeZone($config['timezone']);
$date = new DateTime($currentDate);
$date->setTimezone($this->tz);
return $date;
}
}
# DIC.php
use src/TimeZone;
use UserController;
class DIC {
private function getTimeZone() {
$config = parse_ini_file('timezone.ini');
retrun new TimeZone($config['timezone']);
}
public function getUserModule() {
return new UserController(
($this->getTimeZone()->getDateTime())
)
}
}
# UserController.php
class UserController {
protected $date;
public function __constructor(\DateTime $date) {
$this->date = $date // Можно расшарить между внутренними компонентами модуля
}
}
3. Как использовать?
# У каждого компонента параметр со своей временной меткой
$dic = new DIC();
$userModule = $dic->getUserModule();
$customerModule = $dic->getCustomerModule();
$adminModule = $dic->getAdminModule();
# PS. Подразумевается что UserController управляет сервисами содуля.. одним словом - настоящий контроллер)