Не знаю как в чистом PHP это сделать, но в Yii 2 достаточно сделать так.
config/main.php'components' => [
'formatter' => [
'dateFormat' => 'd.MM.Y',
'timeFormat' => 'H:mm:ss',
'datetimeFormat' => 'd.MM.Y H:mm',
],
],
Вывод времени и даты
/* Тут идет установка часового пояса
* естественно вы можете хранить их в кэше или БД
* или вычислять по IP или JS. Тайм зоны можно хранить
* в разных форматах. Лучше в UTC, а еще лучше в
* UNIX timestamp. 1412599260 / 2014-10-06 12:41:00
*/
$myTimeZone = "Europe/Berlin";
Yii::$app->timeZone = $myTimeZone;
Yii::$app->getFormatter()->asDate(time()); // время
Yii::$app->getFormatter()->asDatetime(time()); // Дата и время
Если не изменяет память, то можно так с тайм зоной работать. Естественно можно сделать виджет и постить где вам нужно.
Список тайм доступных тайм зон в PHPUPD: По поводу летнего времени. Можно в форме профиля прикрутить чекбокс "учитывать летнее время", а потом сделать в БД триггер, который в определенную дату менял бы таймштампы +1 и -1 час.