Django入門|テンプレートでの日付の表示フォーマット変更方法のイメージ画像

Django入門|テンプレートでの日付の表示フォーマット変更方法

  • 公開日:2018/05/05
  • 更新日:2018/10/19
  • 投稿者:n bit

Djangoではテンプレートに出力する日付データの表示方法が標準で決められています。今回はその表示フォーマットを個別に変更する方法を解説します。

  • Python
  • Django

この記事は約 分で読めます。(文字)

テンプレートで日付の表示フォーマットを変更する方法

Djangoのテンプレート上で表示される日付の表示フォーマットを変更する方法はいくつかあります。今回は、表示ごとに細かくコントロールすることができる組み込みフィルタを使った方法を説明します。

組み込みフィルタ「date」を使った変更方法

Djangoではテンプレート上で表示させる日付のフォーマットを任意で変更することが可能です。表示の変更方法はテンプレートの組み込みフィルタ「date」を利用し、引数に書式を指定することで設定します。

引数での書式設定に使えるフォーマット文字列は下記の一覧表ご参照ください。

組み込みフィルタ「date」のフォーマット文字列一覧表

期間フォーマット文字説明出力例
Y年を4桁で表示します。'1999'
y年を2桁で表示します。'99'
L閏年かどうかを表すブール値で表示します。True または False
m月を2桁のゼロ詰めで表示します。'01' から '12'
nを表示します。'1' から '12'
NAssociated Press スタイルの月の省略表記で表示します。独自の拡張'Jan.' , 'Feb.' , 'March' , 'May'
F月を長いテキスト形式で表示します。'January'
M月を3文字のテキスト形式で表示します。'Jan'
b月を3文字の小文字のテキスト形式で表示します。'jan'
WISO-8601 に従った年の中の週を数値で表示します。(週は月曜日から開始)1 , 53
曜日w曜日を数値で表示します。'0' (Sunday) to '6' (Saturday)
曜日l曜日を長いテキスト形式で表示します。'Friday'
曜日D曜日を3文字のテキスト形式で表示します。'Fri'
z年の中の日を表示します。0 から 365
d日を2桁のゼロ詰めで表示します。'01' から '31'
S日につける2文字の序数接尾辞を表示します。'st' , 'nd' , 'rd' or 'th'
t月の日数を表示します。28 から 31
jを表示します。'1' から '31'
日時rRFC 2822に従ったフォーマットの日時を表示します。'Thu, 21 Dec 2000 16:01:07 +0200'
午前、午後a'a.m.' または 'p.m.' を表示します。(Associated Press に合わせるため、'.' が入っています)'a.m.'
午前、午後A'AM' または 'PM'を表示します。'AM'
H24時間表記の時をゼロ詰めで表示します。'00' から '23'
h12時間表記の時をゼロ詰めで表示します。'01' から '12'
G24時間表記の時を表示します。'0' から '23'
g12時間表記の時を表示します。'1' から '12'
時分P12時間表記の時、分、'a.m.'/'p.m.' を表示します。独自の拡張(ゼロ分の場合には省略され、必要に応じて 'midnight' または 'noon' を表示します)'1 a.m.' , '1:30 p.m.' , 'midnight' , 'noon' , '12:30 p.m.'
時分f12時間表記の時、分を表示します。独自の拡張(ゼロ分の場合には表示されません)'1' , '1:30'
i分を2桁のゼロ詰めで表示します。'00' から '59'
s秒を2桁のゼロ詰めで表示します。'00' から '59'
タイムゾーンOグリニッジ標準時からの時差を表示します。'+0200'
タイムゾーンZタイムゾーンオフセット値を秒換算で表示します。-43200 から 43200
タイムゾーンTタイムゾーンを表示します。'UTC' , 'JST'

組み込みフィルタ「date」の設定方法

では、実際の指定方法を見ていきます。

組み込みフィルタなし

まずは何も設定せず表示させてみましょう。「created_at」にはオブジェクトの作成日が格納されています。

{{ object.created_at }}

フィルターを何も設定していない状態では下記のように表示されます。

  • 2017年8月11日14:15
組み込みフィルタを利用

表示させるオブジェクトの後にdateフィルタを設定し引数に書式をフォーマットによって設定します。表示フォーマットに用意されているものであれば自由に表示させることが可能です。また表示フォーマットの間に文字列を挟むこともできます。

{{ object.created_at|date:"y/n/j H:i:s" }}

上記のように設定した場合の表示は下記のようになります。

  • 17/8/11 14:15:50

間に挟む文字列や設定する書式フォーマットを変えることで様々な表示に変更することができます。

{{ object.created_at|date:"Y-m-j H:i:s" }}
  • 2017-08-11 14:15:50
{{ object.created_at|date:"M j, Y H:i:s" }}
  • Aug 11, 2017 14:15:50

タイムゾーンの設定をオン・オフする

Djangoではテンプレート上で表示させる日付データのタイムゾーンも変更することができます。通常であればデータベースにUTCの形式で日時データが保存されています。特にテンプレート側で設定を行わない限りはsettings.pyの中で設定されている標準のタイムゾーン設定に従いそのローカルタイムで表示されます。

settings.py

TIME_ZONE = 'Asia/Tokyo'

今回の場合は日本標準時に設定されていますのでUTC形式で保存された日時データが自動的にJST(日本標準時)に変更されて表示されています。先程の組み込みフィルタ「date」を利用して現状使用されているタイムゾーンを確認します。

タイムゾーンを表示させる表示フォーマット「T」を書式に設定することで確認できます。

{{ object.created_at|date:"y/n/j H:i:s T" }}

先ほど表示されていた日付に、タイムゾーンが足されて表示されています。

  • 17/8/11 14:15:50 JST

settings.pyの設定に合わせてJST(日本標準時)が利用されていますね。

Djangoではこのタイムゾーンをオフにする組み込みフィルタが用意されています。

{% localtime off %} {% endlocaltime %}

この「localtime」の引数に「off」を設定することでタイムゾーンが解除されデータベースに保存されたままのデータが表示されるようになります。先程の表示フォーマット「T」を書式に設定しているものをこの「localtime」で挟んで記述してみます。

{% localtime off %}{{ obj.trade_at|date:"y/n/j H:i:s T" }}{% endlocaltime %}

すると、日本標準時からは9時間早い協定世界時(UTC)に変更されていることが確認できます。

  • 17/8/11 05:15:50 UTC

今日のdot

この様にDjangoではテンプレート上の表示させたい場所でそれぞれ自由に表示方法を個別に変更させてフロントに出力することができます。

利用方法は先程の組み込みフィルタ「date」を利用し引数に書式フォーマットを設定するだけです。

{{ object.created_at|date:"Y-m-j H:i:s" }}

上記のように設定した場合の表示は下記のようになります。

  • 2017-08-11 14:15:50