PHP, Yii2 и PostgreSQL. Как сделать поддержку временных зон для юзеров?
Не знаю как в чистом 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 час.
Вот тезисно ответы на мой вопрос
1. В бд хранить даты нужно в UTC
2. Yii2 Formatter умеет из коробки **при выводе** учитывать таймзону. Настраиваешь таймзону, передает в него время в UTC и он сам все сдалет за тебя. 
3. Yii2 Date Validator умеет из коробки **при записи** даты в атрибут модели конвертировать ее обратно в UTC и отдавать в указанный в настроках валидатора атрибут модели, чтобы дальше оперировать даными опять же в UTC.
4. После логина юзера нужно именить у форматтера timeZone на указанную в профиле залогиненого юзера. Пока юзер не залогинен - работаем в UTC.
5. В UTC нужно перевести ОС, БД и PHP. Соответственноdate_default_timezone_set('UTC'); или в php.ini
6. Формат времени лучше не перекладывать на базу, так как переезд на другую базу или взятие данных из кэша все сломают.