rak писал(а): ↑2017.03.10, 01:10
нет, чтобы time() отдавало в utc нужно делать
Не вводите в заблуждение.
time() - возвращает текущую временную метку Unix, кол-во секунд с 1970-01-01 00:00:00 GMT, и от date_default_timezone_set() это значение не зависит. От date_default_timezone_set() зависит форматирование с помощью date() или DateTime::format().
Код: Выделить всё
date_default_timezone_set('UTC');
$time1 = time(); // 1489108454
$date1 = date(DATE_ISO8601, $time1); // 2017-03-10T01:14:14+0000
date_default_timezone_set('Europe/Kiev');
$time2 = time(); // 1489108454
$date2 = date(DATE_ISO8601, $time2); // 2017-03-10T03:14:14+0200
girmate писал(а): ↑2017.03.10, 01:39
В целом я так и не понял как мне:
1. Сохранять дату/время
2. Показывать пользователю время регистрациис учетом его временой зоны
В базу дату-время проще всего писать временной меткой как целое число. Не будет двойного преобразования при форматировании. Зону пользователя тоже пишите в БД. То есть:
Код: Выделить всё
$user->created_at = time();
$user->timezone = 'Europe/Kiev';
На запуск приложения повесьте бихейвиор, чтобы зоной по умолчанию сделать зону пользователя:
Код: Выделить всё
Yii::$app->timeZone = $user->timezone; // Внутри там date_default_timezone_set()
На странице форматируйте с помощью:
Код: Выделить всё
Yii::$app->formatter->asDatetime($user->created_at)
Или любым другим способом: date(), DateTime::format(). Это форматирование будет учитывать установленную ранее таймзону по умолчанию.