Форматировщик Yii2 показывает другую дату

Я хочу просмотреть время из db, а затем сохранить его в другой db.table в формате timestamp, но каждый раз, когда я конвертирую его, у меня разное время:

        print_r($sub_datetime['datetime']);echo "<br>";
        $temptime = Yii::$app->formatter->asTimestamp($sub_datetime['datetime']);
        print_r($temptime);echo "<br> ";
        $temptime2 = Yii::$app->formatter->asDatetime($temptime);
        print_r($temptime2);echo "<br> ";
        $temptime3 = Yii::$app->formatter->asTimestamp($temptime2);
        print_r($temptime3);echo "<br> ";

Получать:

10-5-2015 10:00
1431252000
10-5-2015 13:00
1431262800

person Антон Лужановский    schedule 05.05.2015    source источник


Ответы (1)


Проблема

Функция asTimestamp предполагает, что указанная вами дата по умолчанию является UTC, и выдает значение времени UTC.

Однако функция asDatetime думает иначе и получает системный часовой пояс, возвращая вам дату со смещением системного часового пояса.

Решение

У вас есть несколько вариантов, подойдет любой

  1. Установите часовой пояс форматтера yii на utc Yii::$app->formatter->timeZone = 'UTC'; перед вызовом функции asDatetime (и при необходимости верните исходное значение).
  2. Прежде чем передавать метку времени в asTimestamp, сместите ее по своему часовому поясу, чтобы преобразовать ее в UTC.
  3. Получив результат asDatetime, сместите его по часовому поясу, чтобы преобразовать обратно в UTC.
person arkoak    schedule 05.05.2015