Как отобразить объект 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
{{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") }}
см. документацию об этом: