Вывод дат с пользовательской timeZone

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
louisvuitton
Сообщения: 203
Зарегистрирован: 2014.02.16, 03:09

Вывод дат с пользовательской timeZone

Сообщение louisvuitton »

Здравствуйте,
Можете пошагово объяснить, какие действия нужно провести, чтобы выводить даты в timezone пользователя, либо по умолчанию Europe/Moscow для гостя?!
Делаю по гугловским советом - постоянно какие то ошибки. :x
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Вывод дат с пользовательской timeZone

Сообщение zelenin »

а можно я не буду тратить время на написание советов, которые ты уже использовал, а ты сразу их напишешь, приложив тексты ошибок?
louisvuitton
Сообщения: 203
Зарегистрирован: 2014.02.16, 03:09

Re: Вывод дат с пользовательской timeZone

Сообщение louisvuitton »

Ну например кто то посоветовал способ: добавить в конфиг

Код: Выделить всё

    'on beforeRequest' => function () {
        $user = Yii::$app->user->identity;
        if ($user && $user->timezone) {
            Yii::$app->setTimeZone($user->timezone);
        }
    },
(вроде бы логично, хотя на каждый запрос, даже где нет дат, дергать эту проверку так себе выглядит)

Я на это получаю, что нет у юзера такого свойства
Getting unknown property: common\models\User::timezone


Другой посоветовал в конфиг

Код: Выделить всё

'formatter' => [
    'class'    => 'yii\i18n\Formatter',
    'timeZone' => Yii::$app->user->isGuest ? 'UTC' : Yii::$app->user->identity->timezone,
],
Вроде выглядит хорошо, но тут сыпятся
Notice: Trying to get property of non-object in .../common/config/base.php on line 42
+ в итоге откуда-то
An Error occurred while handling another error:
yii\web\HeadersAlreadySentException: Headers already sent in .../common/config/base.php on line 42. in .../vendor/yiisoft/yii2/web/Response.php:366


Поэтому и хочу раз и навсегда узнать правильный, лучший способ как решается этот вопрос.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Вывод дат с пользовательской timeZone

Сообщение zelenin »

louisvuitton писал(а): 2018.03.15, 20:43 Ну например кто то посоветовал способ: добавить в конфиг

Код: Выделить всё

    'on beforeRequest' => function () {
        $user = Yii::$app->user->identity;
        if ($user && $user->timezone) {
            Yii::$app->setTimeZone($user->timezone);
        }
    },
(вроде бы логично, хотя на каждый запрос, даже где нет дат, дергать эту проверку так себе выглядит)

Я на это получаю, что нет у юзера такого свойства
Getting unknown property: common\models\User::timezone
логично. Как собираешься узнать зону юзера на стороне php? наверное он ее должен где-то указать, а ты когда-то завязать на модель User.
louisvuitton писал(а): 2018.03.15, 20:43 Другой посоветовал в конфиг

Код: Выделить всё

'formatter' => [
    'class'    => 'yii\i18n\Formatter',
    'timeZone' => Yii::$app->user->isGuest ? 'UTC' : Yii::$app->user->identity->timezone,
],
Вроде выглядит хорошо, но тут сыпятся
Notice: Trying to get property of non-object in .../common/config/base.php on line 42
пишет, что пытаешься получить поле у не-объекта. Но исправив эту ошибку, ты столкнешься с предыдущей, ведь поля timezone у тебя все равно нет.
louisvuitton писал(а): 2018.03.15, 20:43 Поэтому и хочу раз и навсегда узнать правильный, лучший способ как решается этот вопрос.
добавить юзеру поле, позволить ему выбрать в профиле зону.
louisvuitton
Сообщения: 203
Зарегистрирован: 2014.02.16, 03:09

Re: Вывод дат с пользовательской timeZone

Сообщение louisvuitton »

Я надеялся yii из коробки имеет какую-то зону для каждого пользователя. (получаемую как-то автоматически по ip или еще как)
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Вывод дат с пользовательской timeZone

Сообщение zelenin »

louisvuitton писал(а): 2018.03.15, 21:00 Я надеялся yii из коробки имеет какую-то зону для каждого пользователя. (получаемую как-то автоматически по ip или еще как)
нет
mkramer
Сообщения: 531
Зарегистрирован: 2014.12.14, 13:02

Re: Вывод дат с пользовательской timeZone

Сообщение mkramer »

louisvuitton писал(а): 2018.03.15, 21:00 Я надеялся yii из коробки имеет какую-то зону для каждого пользователя. (получаемую как-то автоматически по ip или еще как)
Хорошая надежда. Yii и модель-то пользователя из коробки не имеет, а ты хочешь, чтоб ещё и timezone
Ответить