Как отобразить объект DateTime в шаблоне Twig

одно из моих полей в одном из моих объектов является переменной "datetime".

Как преобразовать это поле в строку для рендеринга в браузере?

вот фрагмент кода:

{% for game in games %}
    ...
        <td> {{game.gameTeamIdOne.teamName}} </td>
        <td> {{game.gameTeamIdTwo.teamName}} </td>
        <td> {{game.gameDate}}</td>
    </tr>
{% endfor %}

вот переменная в моем классе сущностей:

/**
 * @var date $gameDate
 *
 * @ORMColumn(name="GAME_DATE", type="datetime", nullable=true)
 */
private $gameDate;

и вот сообщение об ошибке, которое я получаю:

исключение было вызвано во время отрисовки шаблона ("фиксируемая фатальная ошибка: объект класса DateTime не удалось преобразуется в string in ...appcachedevtwig9bad58fd3bb1517632badf1fdc7fa4a8.php line 33") в "BeerBundle:игры:gameTable.формат html.веточка " на линии 10.

8 ответов


хотя вы можете использовать

{{ game.gameDate|date('Y-m-d') }}

подход, имейте в виду, что эта версия не учитывает локаль пользователя, которое не должно быть проблем с сайта только абонентам одной национальности. Международные пользователи должны отображать дату игры совершенно по-другому, как расширение \DateTime класс, и добавив __toString() метод, который проверяет локаль и действует соответственно.

редактировать:

как указано @Nic в комментарии, если вы используете Intl расширение веточки, у вас будет localizeddate фильтр доступен, который показывает дату в локали пользователя. Таким образом, вы можете отбросить мою предыдущую идею расширения \DateTime.


можно использовать date фильтр:

{{ game.gameDate|date("m/d/Y") }}

это зависит от формата, который вы хотите, чтобы дата была показана как.

статический формат даты

если вы хотите отобразить статическую формат, который одинаков для всех районов (например,ISO 8601 для каналов Atom), вы должны использовать Прута date фильтр:

{{ game.gameDate|date('Y-m-d\TH:i:sP') }}

который всегда будет возвращать datetime в следующем формате:

2014-05-02T08:55:41Z

в форматировать строки, принятые date фильтр такой же, как вы использовали бы для PHP date() функции. (единственная разница заключается в том, что, насколько я знаю, вы не можете использовать предопределенные константы, которые могут быть использованы в PHP


не забудьте

@ORM\HasLifecycleCallbacks ()

сущности :

/**
     * Set gameDate
     *
     * @ORM\PrePersist
     */
    public function setGameDate()
    {
        $this->dateCreated = new \DateTime();

        return $this;
    }

вид:

{{ item.gameDate|date('Y-m-d H:i:s') }}

>> выход 2013-09-18 16:14:20


существует инструмент symfony2 для отображения даты в текущей локали:

{{ user.createdAt|localeDate }} to have a medium date and no time, in the current locale

{{ user.createdAt|localeDate('long','medium') }} to have a long date and medium time, in the current locale

https://github.com/michelsalib/BCCExtraToolsBundle


{{game.gameDate | date('c')}}  // 2014-02-05T16:45:22+00:00

для полной строки времени даты, включая смещение часового пояса.


можно представить следующим образом

{{ post.published_at / date ("m/d/Y")}}

для больше деталей смогите посетить http://twig.sensiolabs.org/doc/filters/date.html


Я знаю, что это довольно старый вопрос, но я нашел этот вопрос сегодня, но ответы не были тем, что мне нужно.

Так вот что мне нужно.

Если вы, как я ищем для отображения настоящее дата в веточке, вы можете использовать следующее:

{{ "now"|date("m/d/Y") }}

см. документацию об этом:

дата в Twig