Одно из моих полей в одной из моих сущностей - это переменная datetime.
Как я могу преобразовать это поле в строку для отображения в браузере?
Вот фрагмент кода:
{% for game in games %}
...
<td> {{game.gameTeamIdOne.teamName}} </td>
<td> {{game.gameTeamIdTwo.teamName}} </td>
<td> {{game.gameDate}}</td>
</tr>
{% endfor %}
Вот переменная в моем классе сущности:
/**
* @var date $gameDate
*
* @ORM\Column(name="GAME_DATE", type="datetime", nullable=true)
*/
private $gameDate;
И вот сообщение об ошибке, которое я получаю:
Возникла исключительная ситуация во время рендеринга шаблона («Catchable Fatal Error: объект класса DateTime не может быть преобразован в строку в ... \ app \ cache \ dev \ twig \ 9b \ ad \ 58fd3bb1517632badf1fdc7fa4a8.php строка 33» ) в "BeerBundle: Games: gameTable.html.twig" в строке 10.
{{ game.gameDate|date('Y-m-d H:i:s') }}
для даты и времени. У меня были проблемы с поиском персонажа за минуты.date
функцию Twig . Исходя из вашего примера, вам нужно обернуть его{% if game.gameDate is not empty %} ... {%endif}
DateTime
класс! Вместо этого просто используйтеlocalizeddate
фильтр для Twig .{% if game.gameDate %} {{ game.gameDate|date('Y-m-d H:i:s') }} {% endif %}
будет предложеноВы можете использовать
date
фильтр:источник
__toString()
метод должен знать, в какой формат преобразовыватьDateTime
объект, и, возможно, существуют сотни возможных форматов. Конечно, в PHP вы можете использоватьformat()
метод дляDateTime
объекта, который принимает аргумент формата, иdate
фильтр является просто эквивалентом Twig этого метода.Это зависит от формата, в котором вы хотите, чтобы дата отображалась как.
Статический формат даты
Если вы хотите отобразить статический формат, который одинаков для всех локалей (например, ISO 8601 для канала Atom), вы должны использовать
date
фильтр Twig :Который всегда будет возвращать дату и время в следующем формате:
Строки формата, принятые
date
фильтром, такие же, как вы использовали бы для функции PHPdate()
. (единственное отличие состоит в том, что, насколько я знаю, вы не можете использовать предопределенные константы, которые можно использовать в PHPdate()
функции )Локализованные даты (и время)
Однако, поскольку вы хотите отобразить его в браузере, вам, скорее всего, потребуется показать его в удобочитаемом формате, локализованном для языка и местоположения пользователя. Вместо того, чтобы выполнять локализацию самостоятельно, вы можете использовать для этого расширение Intl (которое использует PHP IntlDateFormatter ). Он обеспечивает фильтр,
localizeddate
который будет выводить дату и время в локализованном формате.Аргументы за
localizeddate
:date_format
: Одна из строк формата (см. Ниже)time_format
: Одна из строк формата (см. Ниже)locale
: (необязательно) Используйте это, чтобы переопределить настроенную локаль. Не используйте этот аргумент для использования локали по умолчанию, которую можно настроить в конфигурации Symfony.(есть больше, см. документы для полного списка возможных аргументов)
Для
date_format
иtime_format
вы можете использовать одну из следующих строк:'none'
если вы не хотите включать этот элемент'short'
для самого сокращенного стиля (13.1252 или 15:30 в английском языке)'medium'
для среднего стиля (12 января 1952 года в английском языке)'long'
для длинного стиля (12 января 1952 или 3:30:32 вечера в английском языке)'full'
для полностью определенного стиля (вторник, 12 апреля 1952 года или 15:30:42 по тихоокеанскому времени в английском языке)пример
Так, например, если вы хотите отобразить дату в формате, эквивалентном
February 6, 2014 at 10:52 AM
, используйте следующую строку в шаблоне Twig:Однако, если вы используете другую локаль, результат будет локализован для этой локали:
6 februari 2014 10:52
дляnl
локали;6 février 2014 10:52
дляfr
локали;6. Februar 2014 10:52
дляde
локали; и т.п.Как вы видете,
localizeddate
не только переводит названия месяцев, но и использует локальные обозначения. Английская нотация ставит дату после месяца, где нотации Голландии, Франции и Германии ставят ее до месяца. Английские и немецкие названия месяцев начинаются с заглавной буквы, тогда как голландские и французские названия месяцев строчные. И немецкие даты имеют точку.Установка / настройка локали
Инструкции по установке для расширения Intl можно найти в этом отдельном ответе .
источник
Не забывайте
Сущность :
Посмотреть:
>> Вывод 2013-09-18 16:14:20
источник
Существует инструмент symfony2 для отображения даты в текущей локали:
https://github.com/michelsalib/BCCExtraToolsBundle
источник
Для полной строки даты и времени, включая смещение часового пояса.
источник
вы можете сделать следующим образом
{{post.published_at | date ("m / d / Y")}}
Для получения более подробной информации посетите http://twig.sensiolabs.org/doc/filters/date.html.
источник
Я знаю, что это довольно старый вопрос, но я нашел этот вопрос сегодня, но ответы были не те, которые мне были нужны.
Так вот что мне было нужно.
Если вы, как и я , хотите отобразить текущую дату в ветке, вы можете использовать следующее:
{{ "now"|date("m/d/Y") }}
Смотрите документацию об этом:
дата в ветке
источник
Чтобы избежать ошибки при нулевом значении, вы можете использовать этот код:
источник