PowerCMS Xでは、日付フォーマットの指定の仕方がMovable Typeとは違いPHPと同じフォーマットになりました。
今回は、Movable Typeとの記述方法の違いをまとめてみました。
(この記事はPowerCMS X Ver.2.57で検証しています)
Movable Typeとくらべて大きな違いとしては 、「%」をつける必要がなくなったという点。
あとは英語の月名、曜日名を出力するのに 「language="en"」 をつける必要がなくなりました。
たとえば、[2021年 2月 23日(火)]と表示したい場合
<$mt:Date format="%Y年 %B月 %e日(D)"$>
<$mt:Date format="Y年 n月 j日(D)"$>
date formatでの指定の仕方を、Movable TypeとPowerCMS Xで比較して表にまとめました。
MT | PowerCMS X | 説明 | サンプル |
%Y | Y | 西暦4桁 | 2021 | %y | y | 西暦2桁 | 21 |
L | うるう年は1、それ以外は0 | 0 | |
%m | m | 月2桁(0詰めアリ) | 04 |
%b | %B | n | 月1桁(0詰めナシ) | 4 |
%b | M | 英語で月の名前(省略) ※MTはlanguage="en"が必要 | Sep |
%B | F | 英語で月の名前(完全) ※MTはlanguage="en"が必要 | September |
%d | d | 日付2桁(0詰めアリ) | 08 |
%e | j | 日付1桁(0詰めナシ) | 8 |
%j | z | 年初からの経過日 0~365 ※MTは3桁0詰めアリ | 78 |
t | 月の日数 28~31 | 28 | |
%H | H | 時刻24時間形式で2桁(0詰めアリ) | 08 |
%k | G | 時刻24時間形式の1桁(0詰めナシ) | 8 |
%I | h | 時刻12時間形式の2桁(0詰めアリ) | 08 |
%l | g | 時刻12時間形式の1桁(0詰めナシ) | 8 |
%M | i | 分2桁(0詰めアリ) | 25 |
%S | s | 秒2桁(0詰めアリ) | 38 |
%p | A | 午前/午後。AM/PM | AM |
a | 午前/午後。am/pm | am | |
%a | D | 曜日(省略) | Tue |
%A | l | 曜日(完全) | Tuesday |
%w | W | 曜日(0~6) | 0(日)~6(土) |
N | 曜日(1~7) | 1(月)~7(日) |
PowerCMS X Ver.2.3より、「D」「l」を日本語表記の曜日にすることが可能になりました。
表示する方法は、format属性内に「年」「月」「日」のいずれかの文字がある場合です。
PowerCMS X Ver.2.571より、「language="ja"」を指定すると日本語表記で出力できるようになりました。
<$mt:Date format="Y年 n月 j日(D)"$> → 2021年 2月 23日(火) <$mt:Date format="曜日:l"$> → 曜日:火曜日 <$mt:Date format="年(D)" replace="'年',''"$> → (火) <$mt:Date format="(D)" language="ja"$> → (火)
PowerCMS X Ver.2.57より、format属性内でバックスラッシュでエスケープ処理が可能になりました。
<$mt:Date format="\D\A\Y:j"$> → DAY:23
先日、「コンテンツの更新日が今日から何日前かどうか判別してアイコンを表示する」という機能を作ることがありました。
要するに日付の比較です。
ここでは、記事の公開日と今の日付を比較する例を作ってみます。
「%j」で年での総日数を出力して、現在の日数と記事の日数と比較しました。
日数の差を表示しています。
※年が違う場合は考慮していません。
<$mt:Date format="%j" setvar="SET_dateJ_now"$> <mt:Entries> <$mt:EntryDate format="%j" setvar="SET_dateJ_cur"$> </mt:Entries> <$mt:Var name="SET_dateJ_cur" op="-" value="$SET_dateJ_now"$>
PowerCMS X では、phpの「date関数」を使用しています。
以下は、現在の日付を「strtotime」モディファイアでYmd形式を Unixタイムスタンプ に変換して比較しています。
<$mt:SetVar name="timeString" value="-7 day"$> <$mt:Var name="timeString" strtotime setvar="minus1Week"$> <$mt:Date format="Y-m-d" unixtime="$minus1Week"$>
これで7日前の日付を出すことができました。
比較する場合は、記事の日付をUnixタイムスタンプに変換してそろえてやれば可能です。
「unixtime」と「strtotime」は相互関係です。
<$mt:Date strtotime ts="2021-03-08 19:00:00"$> → 1615197600 <$mt:Date unixtime="1615197600"$> → 2021-03-08 19:00:00
Date系のタグ属性、UnixタイムスタンプをYmd形式に変換します。
formatタグを併用して、出力結果を整形できます。
<$mt:Date unixtime="1615199619"$> → 2021-03-08 19:33:39
<$mt:Date unixtime="1615199619" format="Y-m-d"$> → 2021-03-08
※「unixtime」は、 PowerCMS X Ver2.014より実装されました。
Ymd形式をUnixタイムスタンプに変換します。
こちらはグローバルモディファイアなので、どこにでも使えます。
<$mt:Date strtotime$> → 1615199619
<$mt:Date ts="2021-03-08 19:33:39" strtotime$> → 1615199619
<$mt:SetVar name="SET_date" value="2021-03-08"$> <$mt:Var name="SET_date" strtotime$> → 1615129200
PHPと同様に、文字列を指定して特定の日時を出力することも可能です。
<mt:Block strtotime>-7 day</mt:Block> → 7日前 <mt:Block strtotime>7 days ago</mt:Block> → 7日前 <mt:Block strtotime>-2 week</mt:Block> → 2週間前 <mt:Block strtotime>-2 month</mt:Block> → 2か月前 <mt:Block strtotime>-2 year</mt:Block> → 2年前 <mt:Block strtotime>noon</mt:Block> → 今日の12時 <mt:Block strtotime>today 13:00:00</mt:Block> → 今日の13時 <mt:Block strtotime>last sunday</mt:Block> → 先週の日曜日 <mt:Block strtotime>-1 sunday</mt:Block> → 先週の日曜日
<mt:Block strtotime>+2 week 3 days 4 hours 5 seconds</mt:Block> → 2週間、3日、4時間、5秒後 <mt:Block strtotime>last day of this month</mt:Block> → 今月の末日 <mt:Block strtotime>first day of next month</mt:Block> → 来月の最初の日
PowerCMS X Ver3.0から、「format_name」が追加されました。
Movable Typeにも同名のモディファイアがありましたが基本同じです。
EメールやRSS2.0で使われる日付形式です。(例:Tue, 14 Dec 21 11:36:41 +0900)
<$mt:Date format_name="rfc822"$> <$mt:Date format="D, d M y H:i:s +0900"$>
ISO規格の日付形式です。(例:2021-12-14T11:36:41+0900)
<$mt:Date format_name="iso8601"$> <$mt:Date format="Y-m-d\TH:i:s+0900"$>
RSSで使用される日付形式です。(例:Tue, 14 Dec 2021 11:36:41 +0900)
<$mt:Date format_name="RSS"$> <$mt:Date format="r"$> <$mt:Date format="D, d M Y H:i:s +0900"$>
ATOMで使用される日付形式です。(例:2021-12-14T11:36:41+09:00)
<$mt:Date format_name="ATOM"$> <$mt:Date format="c"$> <$mt:Date format="Y-m-d\TH:i:s+09:00"$>
ISO8601とほぼ同じような日付形式です。(例:2021-12-14T11:36:41+09:00)
<$mt:Date format_name="W3C"$> <$mt:Date format="Y-m-d\TH:i:s+09:00"$>
version 3.03にて、 ファンクションタグ「mt:entrymodifiedon」などの日付系のタグの一部で「format_name」モディファイアが正常に動作しないケースを修正しました。
PowerCMS X Ver3.0から、「date_modify」が追加されました。
機能的にはPHPの同名の関数と同じです。タイムスタンプに変更します。
<$mt:Date$> → 2021-12-10 18:28:18 ※現在の時刻 <$mt:Date date_modify$> → 20211210182818 <$mt:Date date_modify="this week Monday"$> → 20211206000000 <$mt:Date date_modify="this week Monday" format="Y-m-d H:i:s"$> → 20211206000000 <$mt:Date date_modify="this week Monday" format_ts="Y-m-d H:i:s"$> → 2021-12-06 00:00:00
※日時を整形する場合は「format」ではなく「format_ts」を使用してください。
「PowerCMS X」は、どんどんバージョンが上がっていって追加機能を把握するのも大変ですが、そのぶん使いやすくなっているので面白いCMSです。オススメです。
MONSTER DIVEでは、おなじみMovable TypeからPowerCMS Xまで構築経験がありますので、ぜひご相談くださいませ。
→ Movable Type カスタマイズ構築サービス