Formatter и работа с датой.

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
SergeyK
Сообщения: 26
Зарегистрирован: 2015.05.05, 14:02

Formatter и работа с датой.

Сообщение SergeyK »

Всем привет.

При работе с Formatter заметил странное поведение. При переводе timestamp в обычный вид и обратно, накидывается "лишние часы". в моем случаи +3, в соответствии с выставленной таймзоной (Москва).

Пример кода:

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

    echo 1504105200;
    echo PHP_EOL;
    echo $dt = Yii::$app->getFormatter()->asDatetime(1504105200, "php:Y-m-d H:i:s");
    echo PHP_EOL;
    echo $ts = Yii::$app->getFormatter()->asTimestamp($dt);
    echo PHP_EOL;
    echo Yii::$app->getFormatter()->asDatetime($ts, "php:Y-m-d H:i:s");
Вывод:

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

1504105200
2017-08-30 18:00:00
1504116000
2017-08-30 21:00:00
Может я что-то упускаю из вида? Буду рад помощи.
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Formatter и работа с датой.

Сообщение urichalex »

icu обновить
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Formatter и работа с датой.

Сообщение Dominus »

Или в конфиге указать не

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

'timeZone' => 'Europe/Moscow',
а

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

'timeZone' => 'Etc/GMT-3',
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Formatter и работа с датой.

Сообщение urichalex »

Dominus писал(а): 2017.08.31, 04:19 Или в конфиге указать не

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

'timeZone' => 'Europe/Moscow',
а

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

'timeZone' => 'Etc/GMT-3',
Оригинальное решение
SergeyK
Сообщения: 26
Зарегистрирован: 2015.05.05, 14:02

Re: Formatter и работа с датой.

Сообщение SergeyK »

urichalex писал(а): 2017.08.30, 17:14 icu обновить
Спасибо за подсказку, может поделитесь статьей как это сделать? Использую php7.1
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Formatter и работа с датой.

Сообщение urichalex »

Для дебиана есть пакет в экспериментальной ветке
https://packages.debian.org/search?suit ... ywords=icu
Либо собрать ручками
SergeyK
Сообщения: 26
Зарегистрирован: 2015.05.05, 14:02

Re: Formatter и работа с датой.

Сообщение SergeyK »

ICU оказался не причем.
После прочтения кода класса Formatter удалось решить проблему. Может кому-нибудь пригодится.
В нем есть переменная, которая указывает на тайм зону по умолчанию:

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

    /**
     * @var string the time zone that is assumed for input values if they do not include a time zone explicitly.
     *
     * The value must be a valid time zone identifier, e.g. `UTC`, `Europe/Berlin` or `America/Chicago`.
     * Please refer to the [php manual](http://www.php.net/manual/en/timezones.php) for available time zones.
     *
     * It defaults to `UTC` so you only have to adjust this value if you store datetime values in another time zone in your database.
     *
     * @since 2.0.1
     */
    public $defaultTimeZone = 'UTC';
Для решение дополнил конфиг:

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

    'components' => [
        'formatter' => [
            'defaultTimeZone' => 'Europe/Moscow',
        ],
    ],
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Formatter и работа с датой.

Сообщение urichalex »

Ну как же так. Вы настраиваете рабочее окружение, но не настраиваете таймзону...
SergeyK
Сообщения: 26
Зарегистрирован: 2015.05.05, 14:02

Re: Formatter и работа с датой.

Сообщение SergeyK »

urichalex писал(а): 2017.08.31, 21:12 Ну как же так. Вы настраиваете рабочее окружение, но не настраиваете таймзону...
По мне логично что бы Formatter брал таймзону из конфига, зачем два раза указывать в какой таймзоне работать приложению?
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Formatter и работа с датой.

Сообщение urichalex »

SergeyK писал(а): 2017.09.01, 09:43
urichalex писал(а): 2017.08.31, 21:12 Ну как же так. Вы настраиваете рабочее окружение, но не настраиваете таймзону...
По мне логично что бы Formatter брал таймзону из конфига, зачем два раза указывать в какой таймзоне работать приложению?
У вас на одной машине один сайт?
SergeyK
Сообщения: 26
Зарегистрирован: 2015.05.05, 14:02

Re: Formatter и работа с датой.

Сообщение SergeyK »

urichalex писал(а): 2017.09.01, 18:59
SergeyK писал(а): 2017.09.01, 09:43
urichalex писал(а): 2017.08.31, 21:12 Ну как же так. Вы настраиваете рабочее окружение, но не настраиваете таймзону...
По мне логично что бы Formatter брал таймзону из конфига, зачем два раза указывать в какой таймзоне работать приложению?
У вас на одной машине один сайт?
Нет, под словом конфиг я имел ввиду конфиг yii, как пример:

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

    'id'         => 'basic',
    'language'   => 'ru-RU',
   'timeZone'   => 'Europe/Moscow',
    'basePath'   => dirname(__DIR__),
    'bootstrap'  => ['log'],
    'components' => [
        'formatter'    => [
            'defaultTimeZone' => 'Europe/Moscow',
        ],
    ]
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Formatter и работа с датой.

Сообщение urichalex »

SergeyK писал(а): 2017.09.02, 12:11
urichalex писал(а): 2017.09.01, 18:59
SergeyK писал(а): 2017.09.01, 09:43

По мне логично что бы Formatter брал таймзону из конфига, зачем два раза указывать в какой таймзоне работать приложению?
У вас на одной машине один сайт?
Нет, под словом конфиг я имел ввиду конфиг yii, как пример:

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

    'id'         => 'basic',
    'language'   => 'ru-RU',
   'timeZone'   => 'Europe/Moscow',
    'basePath'   => dirname(__DIR__),
    'bootstrap'  => ['log'],
    'components' => [
        'formatter'    => [
            'defaultTimeZone' => 'Europe/Moscow',
        ],
    ]
А я про конфигурацию PHP
Ответить