Chr*_*ann 209 php datetime symfony twig
我的一个实体中的一个字段是"日期时间"变量.
如何将此字段转换为字符串以在浏览器中呈现?
这是一段代码:
{% for game in games %}
...
<td> {{game.gameTeamIdOne.teamName}} </td>
<td> {{game.gameTeamIdTwo.teamName}} </td>
<td> {{game.gameDate}}</td>
</tr>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
这是我的实体类中的变量:
/**
* @var date $gameDate
*
* @ORM\Column(name="GAME_DATE", type="datetime", nullable=true)
*/
private $gameDate;
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误消息:
在渲染模板期间抛出异常("Catchable Fatal Error:类DateTime的对象无法转换为...\app\cache\dev\twig\9b\ad\58fd3bb1517632badf1fdc7fa4a8.php第33行中的字符串" )在第10行的"BeerBundle:Games:gameTable.html.twig"中.
Ger*_*kai 297
虽然你可以使用
{{ game.gameDate|date('Y-m-d') }}
Run Code Online (Sandbox Code Playgroud)
方法,请记住,此版本不尊重用户区域设置,这不应该是仅由一个国籍的用户使用的网站的问题.国际用户应该显示完全不同的游戏日期,例如扩展\DateTime类,并添加一个__toString()方法来检查区域设置并相应地采取行动.
编辑:
正如@Nic在评论中所指出的,如果你使用Twig的Intl扩展,你将有一个localizeddate可用的过滤器,它在用户的语言环境中显示日期.通过这种方式,您可以放弃我之前的扩展想法\DateTime.
Ond*_*ták 89
你可以使用date过滤器:
{{ game.gameDate|date("m/d/Y") }}
Run Code Online (Sandbox Code Playgroud)
Nic*_*tel 67
这取决于您希望日期显示为的格式.
如果要显示静态格式(对于所有语言环境都是相同的(例如Atom提要的ISO 8601),则应使用Twig的date过滤器:
{{ game.gameDate|date('Y-m-d\\TH:i:sP') }}
Run Code Online (Sandbox Code Playgroud)
哪个将以下列格式返回日期时间:
2014-05-02T08:55:41Z
date过滤器接受的格式字符串与您用于PHP date()函数的格式字符串相同.(唯一的区别是,据我所知,你不能使用可以在PHP date()函数中使用的预定义常量)
但是,由于您希望在浏览器中呈现它,您可能希望以人类可读的格式显示它,并根据用户的语言和位置进行本地化.您可以使用Intl扩展(使用PHP的IntlDateFormatter)而不是自己进行本地化.它提供了一个过滤器localizeddate,它将使用本地化格式输出日期和时间.
localizeddate( date_format, time_format [, locale ] )
Run Code Online (Sandbox Code Playgroud)
参数localizeddate:
date_format:格式字符串之一(见下文)time_format:格式字符串之一(见下文)locale:(可选)使用此选项覆盖已配置的区域设置.保留此参数以使用默认语言环境,可以在Symfony的配置中进行配置.(还有更多,请参阅文档以获取可能参数的完整列表)
对于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模板中使用以下行:
{{ game.gameDate|localizeddate('long', 'short') }}
Run Code Online (Sandbox Code Playgroud)
但是,如果使用其他语言环境,则结果将针对该语言环境进行本地化:
6 februari 2014 10:52对于nl现场;6 février 2014 10:52对于fr现场;6. Februar 2014 10:52对于de现场; 等等如您所见,localizeddate不仅会翻译月份名称,还会使用本地符号.英语符号表示月份之后的日期,荷兰语,法语和德语符号在月份之前放置.英语和德语月份名称以大写字母开头,而荷兰语和法语月份名称以小写字母开头.德国日期附加一个点.
Intl扩展的安装说明可以在这个单独的答案中找到.
为了避免空值错误,您可以使用以下代码:
{{ game.gameDate ? game.gameDate|date('Y-m-d H:i:s') : '' }}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
195694 次 |
| 最近记录: |