나뭇 가지 템플릿에서 DateTime 객체를 렌더링하는 방법


215

엔티티 중 하나의 필드 중 하나가 "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;

그리고 내가받는 오류 메시지는 다음과 같습니다.

템플릿을 렌더링하는 동안 예외가 발생했습니다. )의 "BeerBundle : Games : gameTable.html.twig"에서 10 행

답변:


305

사용할 수 있지만

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

이 버전은 사용자 로캘을 존중하지 않으므로 한 국적의 사용자 만 사용하는 사이트에는 문제가되지 않습니다. 외국 사용자는 \DateTime클래스를 확장 __toString()하고 로케일을 확인하고 그에 따라 행동 하는 방법을 추가하는 등 게임 날짜를 완전히 다르게 표시해야합니다 .

편집 :

코멘트에 @Nic에 의해 지적, 당신이 사용하는 경우 나뭇 가지의 국제 확장을 , 당신은해야합니다 localizeddate사용자의 로케일의 날짜를 보여줍니다 가능한 필터를. 이렇게하면 확장에 대한 이전 아이디어를 버릴 수 \DateTime있습니다.


45
{{ game.gameDate|date('Y-m-d H:i:s') }}날짜와 시간. 몇 분 동안 캐릭터를 찾는 데 문제가있었습니다.
murko

6
Twig의 날짜 함수는 (Twig 문서의) PHP 함수와 동일한 형식을 사용합니다. 누군가를 위해 다른 형식을 찾고 php.net/manual/en/function.date.php .
JonnyS

9
null 값에주의하십시오. 비슷한 유스 케이스에서 Twig의 date함수에 null 값을 파이핑 할 때 오늘 날짜가 표시됩니다 . 귀하의 예에 따라 포장을해야합니다.{% if game.gameDate is not empty %} ... {%endif}
fazy

4
현지화에 관해서는 DateTime수업을 확장해서는 안됩니다 ! 대신 간단히 localizeddateTwig 용 필터를 사용하십시오 .
Nic Wortel

1
{% if game.gameDate %} {{ game.gameDate|date('Y-m-d H:i:s') }} {% endif %}제안 될 것입니다
Dheeraj

90

date필터 를 사용할 수 있습니다 :

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

3
당신의 의견에 완전히 찬성합니다. 기본적으로 있어야하는 것입니다.
tftd

2
@ThomasDecaux는 실제로 그렇게 이상하지는 않습니다. 왜냐하면 __toString()메소드는 DateTime객체를 변환 할 형식을 알아야 하고 아마도 수백 가지의 가능한 형식이 있기 때문입니다. 물론 PHP 에서는 형식 인수를 사용 format()하는 DateTime객체 에서 메소드를 사용할 수 있으며 date필터는 해당 메소드와 Twig에 해당합니다.
Nic Wortel

68

날짜를 표시하려는 형식에 따라 다릅니다.

정적 날짜 형식

모든 로케일에 대해 동일한 정적 형식 (예 : Atom 피드의 경우 ISO 8601 )을 표시하려면 Twig의 date필터 를 사용해야합니다 .

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

항상 다음 형식으로 날짜 시간을 반환합니다.

2014-05-02T08 : 55 : 41Z

에 의해 허용되는 형식 문자열 date필터가 은 PHP의 date()함수에 사용하는 것과 동일 합니다 . (단 하나의 차이점은 내가 아는 한 PHP date()함수 에서 사용할 수있는 미리 정의 된 상수를 사용할 수 없다는 것입니다 )

현지화 된 날짜 및 시간

그러나 브라우저에서 렌더링하려는 경우 사용자의 언어 및 위치에 맞게 현지화 된 사람이 읽을 수있는 형식으로 표시하려고 할 수 있습니다. 현지화를 직접 수행하는 대신 Intl Extension 을 사용할 수 있습니다 (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 일 화요일 또는 3시 30 분 42 초 PST (영어 로켈))

예를 들어 날짜를에 해당하는 형식으로 표시하려면 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 확장에 대한 설치 지침은 이 별도의 답변 에서 찾을 수 있습니다 .


1
현지화 된 날짜 및 시간-@Nic에 대해 대단히 감사합니다.
webDEVILopers

안녕하세요, localizeddate를 사용하여 M과 Y 만 출력하는 방법을 알고 있습니까? thks
마리오

3

잊지 마세요

@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


2

현재 로케일로 날짜를 표시하는 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


2
{{game.gameDate | date('c')}}  // 2014-02-05T16:45:22+00:00

표준 시간대 오프셋을 포함한 전체 날짜 시간 문자열



1

나는 이것이 꽤 오래된 질문이라는 것을 알고 있지만 오늘이 질문을 찾았지만 대답은 내가 필요한 것이 아닙니다.

여기 내가 필요한 것이 있습니다.

당신이하면 나처럼 , 디스플레이에 찾고있는 현재의 나뭇 가지에 날짜를, 다음을 사용할 수 있습니다 :

{{ "now"|date("m/d/Y") }}

이에 대한 설명서를 참조하십시오.

나뭇 가지에 날짜


0

null 값에서 오류를 피하기 위해이 코드를 사용할 수 있습니다.

{{ game.gameDate ? game.gameDate|date('Y-m-d H:i:s') : '' }}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.