私のエンティティの1つにある私のフィールドの1つは "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 line 33" 10行目の "BeerBundle:Games:gameTable.html.twig"の中。
あなたは使用することができますが
{{ game.gameDate|date('Y-m-d') }}
このバージョンでは、1つの国籍のユーザーだけが使用するサイトでは問題にならないようにする必要があります。 \DateTime
クラスを拡張し、それにロケールをチェックしてそれに応じて動作する__toString()
メソッドを追加するなど、国際的なユーザーはゲームの日付をまったく異なるものに表示する必要があります。
編集:
コメントで@Nicによって指摘されているように、 Twigの国際拡張 を使用すると、利用可能なlocalizeddate
フィルタが利用可能になります。これはユーザのロケールでの日付を示します。このようにして、\DateTime
を拡張するという私の以前の考えをやめることができます。
date
filterを使うことができます。
{{ game.gameDate|date("m/d/Y") }}
日付を表示する形式によって異なります。
すべてのロケールで同じ静的フォーマットを表示したい場合(例えば、Atomフィードの場合は ISO 8601 )、Twigの date
filter を使用してください。
{{ game.gameDate|date('Y-m-d\\TH:i:sP') }}
これは常に以下のフォーマットで日時を返します。
2014-05-02T08:55:41Z
date
フィルタが受け付けるフォーマット文字列は、 PHPのdate()
関数 に使用するものと同じです。 (唯一の違いは、私が知る限り、PHP date()
関数で使用できる定義済み定数は使用できないことです)
ただし、ブラウザでレンダリングしたいので、ユーザーの言語と場所に合わせてローカライズされた、人間が読める形式で表示したいと思うでしょう。ローカライゼーションを自分で行う代わりに、(PHPの IntlDateFormatter を利用するために) Intl Extension を使用することができます。ローカライズされた形式を使用して日付と時刻を出力するフィルタlocalizeddate
が用意されています。
localizeddate( date_format, time_format [, locale ] )
localizeddate
の引数:
date_format
: フォーマット文字列 の1つ(下記参照)time_format
: フォーマット文字列 の1つ(下記参照)locale
:(オプション)設定されたロケールを上書きするためにこれを使用します。 symfonyの設定で設定できるデフォルトロケールを使用するにはこの引数を省略してください。(他にもあります、考えられる引数の完全なリストは 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秒PST)たとえば、February 6, 2014 at 10:52 AM
と同等の形式で日付を表示したい場合は、Twigテンプレートで次の行を使用します。
{{ game.gameDate|localizeddate('long', 'short') }}
ただし、別のロケールを使用すると、結果はそのロケールにローカライズされます。
nl
ロケールの場合は6 februari 2014 10:52
。fr
ロケールの場合は6 février 2014 10:52
。de
ロケールの場合は6. Februar 2014 10:52
。等.ご覧のとおり、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
{{game.gameDate | date('c')}} // 2014-02-05T16:45:22+00:00
タイムゾーンオフセットを含む完全な日付時刻文字列。
次のようにレンダリングすることができます
{{post.published_at |日付( "m/d/Y")}}
詳細については http://twig.sensiolabs.org/doc/filters/date.html をご覧ください。
現在のロケールで日付を表示するための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
これはかなり古い質問ですが、今日この質問を見つけましたが、答えは私が必要としていたものではありませんでした。
だからここに私は必要なものです。
あなたが私のように現在の日付を小枝で表示しようとしているのなら、以下:
{{ "now"|date("m/d/Y") }}
これに関するドキュメントを参照してください。