我一个实体之一的我的字段之一是“ 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;

这是我收到的错误消息:

在渲染模板的渲染过程中,已经抛出了一个例外(“可追踪的致命错误:dateTime的对象不能转换为... app cache dev twig twig 9b 9b ad ad ad 58fd3bb1517632badf1f1f1fdc7fa4a.php line 33“ )在“ BeerBundle:Games:Gametable.html.twig”第10行。

有帮助吗?

解决方案

虽然您可以使用

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

方法请记住,此版本并不尊重用户语言环境,这不应该是一个只有一个国籍用户使用的网站的问题。国际用户应显示游戏日期完全不同,例如扩展 \DateTime 上课,添加一个 __toString() 它可以检查区域并采取相应作用的方法。

编辑:

正如@nic在评论中指出的那样,如果您使用 twig的intl扩展, ,你会有一个 localizeddate 可用过滤器,显示用户语言环境中的日期。这样,您可以放弃我以前的扩展想法 \DateTime.

其他提示

您可以使用 date 筛选:

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

这取决于您要显示的日期的格式。

静态日期格式

如果您想显示静态格式,这对所有语言端都是相同的(例如 ISO 8601 对于原子饲料),您应该使用树枝 date 筛选:

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

它将以以下格式返回日期时间:

2014-05-02T08:55:41Z

格式字符串 date 过滤器与您使用的过滤器相同 PHP的 date() 功能. 。 (唯一的区别是,据我所知,您不能使用可以在PHP中使用的预定义常数 date() 功能)

本地日期(和时间)

但是,由于您想在浏览器中渲染它,因此您可能希望以人的语言和位置本地化的人类可读格式显示它。您可以使用本地化,而是可以使用 INTL扩展 为此(使用PHP的 intldateFormatter)。它提供了一个过滤器 localizeddate 它将使用局部格式输出日期和时间。

localizeddate( date_format, time_format [, locale ] )

争论 localizeddate:

  • date_format: : 中的一个 格式字符串 (见下文)
  • time_format: : 中的一个 格式字符串 (见下文)
  • locale: :(可选)使用它覆盖配置的语言环境。将此参数放在使用默认场所,可以通过Symfony的配置进行配置。

(还有更多,请参阅 文档 对于可能的参数的完整列表)

为了 date_formattime_format 您可以使用以下字符串之一:

  • 'none' 如果您不想包含此元素
  • 'short' 对于最缩写的风格(英语环境中的12/13/52或3:30 PM)
  • 'medium' 对于中等样式(1952年1月12日,在英语语言环境中)
  • 'long' 长时间的风格(1952年1月12日或下午3:30:32在英语语言环境中)
  • 'full' 对于完全指定的样式(1952年4月12日,星期二或PST下午3:30:42在英语语言环境中)

例子

因此,例如,如果要以等效的格式显示日期 February 6, 2014 at 10:52 AM, ,使用树枝模板中的以下行:

{{ game.gameDate|localizeddate('long', 'short') }}

但是,如果您使用不同的语言环境,则将为该语言环境定位:

  • 6 februari 2014 10:52 为了 nl 语言环境;
  • 6 février 2014 10:52 为了 fr 语言环境;
  • 6. Februar 2014 10:52 为了 de 语言环境;等等

如你看到的, localizeddate 不仅会翻译这个月份的名称,还使用本地符号。英语符号将日期放在一个月之后,荷兰语,法语和德语符号将其提交给本月。英语和德语月份的名字以大写字母开头,而荷兰语和法国月份的名字是小写的。德国日期附有点。

安装 /设置语言环境

可以在INTL扩展程序的安装说明中找到 这个单独的答案.

不要忘记

@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") }}

请参阅有关此的文档:

在树枝中的日期

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top