Smartyを使ってるみなさんー!今日も$マークをいっぱいタイプしましたか??
いつも$マークをタイプしていて思うんですが…、お金がほしいー!!!
どうも、煩悩の塊です。
webサービスを頑張って作って、稼いでいきましょう…。
今回はSmartyで日付を出力する方法をご紹介します。
PHP側でdate関数を使って変数を用意してテンプレにアサインすれば済む話ではあるんですが、Smartyで書けたら便利なことも多いですよね。
現在の日時をSmartyで出力する
{$smarty.now|date_format:'%Y-%m-%d %H:%M:%S'}
実行結果
2015-09-05 00:08:02
PHPで直接書く場合の
date("Y-m-d H:i:s");
と同じ結果を表示できますね!
一週間(7日)前の日付をSmartyで出力する
こんな書き方もできるようです。
{$smarty.now-24*60*60*7|date_format:"%Y-%m-%d"}
実行結果
2015-08-29
data_formatの値は、Smartyのマニュアルが参考になります。
data_formatの変換指定子
%a – 現在のロケールに基づく短縮された曜日の名前
%A – 現在のロケールに基づく完全な曜日の名前
%b – 現在のロケールに基づく短縮された月の名前
%B – 現在のロケールに基づく完全な月の名前
%c – 現在のロケールに基づく適当な日付と時間の表現
%C – 世紀(年を100で割り、整数に丸めたもの。00から99)
%d – 10進数の日付(01から31)
%D – %m/%d/%yと同じ
%e – 月単位の日付を10進数で表したもの。日付が1桁の場合は、前に空白を一つ付ける。(‘1’から’31’)
%g – 西暦の下二桁 [00,99]
%G – 西暦 [0000,9999]
%h – %bと同じ。
%H – 時間を24時間表示の10進数で(00から23まで)
%I – 時間を12時間表示の10進数で(01から12までの範囲)
%j – 年間での日付を10進数で表現 (001から366)
%k – 24時間表示の時間の一桁目に空白を入れる ( 0 から 23までの範囲)
%l – 12時間表示の時間の一桁目に空白を入れる ( 1 から 12までの範囲)
%m – 月を10進数で表現 (01から12)
%M – 分を10進数で表現
%n – 改行文字
%p – 指定した時間により `am’ または `pm’ 、または 現在のロケールに対応した文字列
%r – a.m.およびp.m.表記で表した時間
%R – 24時間表記で表した時間
%S – 10進数で表した秒
%t – タブ文字
%T – 現在の時間。%H:%M:%Sに等しい。
%u – 10進数表記の曜日で[1,7]の範囲。1が月曜日。
%U – 年間で何番目の週であるかを 10 進数で表現。年間で最初の日曜を最初の週の最初の日として数えます。
%V – ISO 8601:1988で規定された現在の年の週番号の10進数表現で 01から53までの範囲となります。 1は最初の週でその週は現在の年に 最低4日はあります。週は月曜日から始まります。
%w – 曜日を10進数で表現。日曜は0になります。
%W – 現在の年で何番目の週であるかを10進数で表現。 年間で最初の月曜を最初の週の最初の日として数えます。
%x – 時間を除いた日付を現在のロケールに基づき表現します。
%X – 日付を除いた時間を現在のロケールに基づき表現します。
%y – 世紀の部分を除いた年を10進数として表現。(00から99までの範囲)
%Y – 世紀を含む年を10進数で表現
%Z – タイムゾーンまたはその名前または短縮形
%% – 文字リテラル`%’
日付の比較をする
日付の比較も、Smartyで可能です。
PHPの記述例
assign("target", $target);
tplファイルの記述例
{if $target|date_format:"%Y-%m-%d" > $smarty.now|date_format:"%Y-%m-%d"}
「$target」は今日よりも未来の日付です。
{else}
「$target」は今日以前の日付です。
{/if}
実行結果
「$target」は今日よりも未来の日付です。
※9月5日に実行
Smartyで日付の「月」や「日」の表示を一桁で行う(0パディングさせない)方法
{$smarty.now|date_format:'%Y年%m月%d日'}
{$smarty.now|date_format:'%Y年%-m月%-d日'}
実行結果
2015年09月05日 2015年9月5日
Smartyは本当に便利ですね!
これからもいっぱい$マークをタイプしたいと思います!