我的一个实体中的一个字段是“日期时间”变量 .
如何将此字段转换为字符串以在浏览器中呈现?
这是一段代码:
{% 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行中的字符串“)在第10行的”BeerBundle:Games:gameTable.html.twig“中 .
8 回答
虽然你可以使用
方法,请记住,此版本不尊重用户区域设置,这不应该是仅由一个国籍的用户使用的网站的问题 . 国际用户应该显示完全不同的游戏日期,例如扩展
\DateTime
类,并向其添加__toString()
方法,以检查区域设置并相应地执行操作 .Edit :
正如@Nic在评论中指出的那样,如果您使用Intl extension of Twig,您将拥有一个
localizeddate
过滤器,它会在用户的语言环境中显示日期 . 通过这种方式,您可以放弃我之前扩展\DateTime
的想法 .你可以使用date过滤器:
这取决于您希望日期显示为的格式 .
静态日期格式
如果要显示静态格式,对于所有语言环境都是相同的(例如,对于Atom提要是ISO 8601),您应该使用Twig的date filter:
哪个将以下列格式返回日期时间:
date
过滤器接受的格式字符串与PHP's date() function使用的格式字符串相同 . (唯一的区别是,据我所知,你不能使用可以在PHPdate()
函数中使用的预定义常量)本地化日期(和时间)
但是,由于您希望在浏览器中呈现它,因此您需要使用语言和位置 . 您可以使用Intl Extension(使用PHP的IntlDateFormatter)而不是自己进行本地化 . 它提供了一个过滤器
localizeddate
,它将使用本地化格式输出日期和时间 .localizeddate
的参数:date_format
:其中一个format strings(见下文)time_format
:其中一个format strings(见下文)locale
:(可选)使用此选项覆盖已配置的区域设置 . 保留此参数以使用默认语言环境,可以在Symfony的配置中进行配置 .(还有更多,请参阅the docs以获取可能参数的完整列表)
对于
date_format
和time_format
,您可以使用以下字符串之一:'none'
如果您不想包含此元素'short'
为最缩写的样式(12/13/52或英语语言环境中的下午3:30)'medium'
为中等风格(1952年1月12日,英语语言环境)'long'
为长款式(1952年1月12日或英语区域的3:30:32)'full'
完全指定的样式(公元1952年4月12日星期二或太平洋标准时间下午3:30:42)示例
因此,例如,如果要以等于
February 6, 2014 at 10:52 AM
的格式显示日期,请在Twig模板中使用以下行:但是,如果使用其他语言环境,则结果将针对该语言环境进行本地化:
对于
nl
语言环境,6 februari 2014 10:52
;对于
fr
语言环境,6 février 2014 10:52
;_159172_为
de
语言环境的6. Februar 2014 10:52
;等等如您所见,
localizeddate
不仅翻译月份名称,还使用本地符号 . 英语符号表示月份之后的日期,荷兰语,法语和德语符号在月份之前放置 . 英语和德语月份名称以大写字母开头,而荷兰语和法语月份名称以小写字母开头 . 德国日期附加一个点 .安装/设置区域设置
可以在this seperate answer中找到Intl扩展的安装说明 .
Dont forget
Entity :
View:
有一个symfony2工具可以在当前语言环境中显示日期:
https://github.com/michelsalib/BCCExtraToolsBundle
对于包含时区偏移的完整日期时间字符串 .
你可以用以下方式渲染
{{ post.published_at|date("m/d/Y") }}
欲了解更多详情,请访问http://twig.sensiolabs.org/doc/filters/date.html
我知道这是一个很老的问题,但我今天发现了这个问题,但答案并不是我需要的 .
所以这就是我需要的 .
如果您和我一样希望在树枝中显示 current 日期,您可以使用以下内容:
{{ "now"|date("m/d/Y") }}
请参阅有关此文档:
date in twig