本文へジャンプ

「PowerCMS X」での日付/時刻の出力まとめ。
~記事が7日以内かどうかを判別する~

PowerCMS Xでは、日付フォーマットの指定の仕方がMovable Typeとは違いPHPと同じフォーマットになりました。

今回は、Movable Typeとの記述方法の違いをまとめてみました。
(この記事はPowerCMS X Ver.2.57で検証しています)

Movable Typeとの違い

Movable Typeとくらべて大きな違いとしては 、「%」をつける必要がなくなったという点。
あとは英語の月名、曜日名を出力するのに 「language="en"」 をつける必要がなくなりました。

たとえば、[2021年 2月 23日(火)]と表示したい場合

Movable Typeの場合

<$mt:Date format="%Y年 %B月 %e日(D)"$>

PowerCMS Xの場合

<$mt:Date format="Y年 n月 j日(D)"$>

Movable TypeとPowerCMS Xのフォーマット比較表

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 時刻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"$> → (火)

format属性内でのエスケープ処理

PowerCMS X Ver.2.57より、format属性内でバックスラッシュでエスケープ処理が可能になりました。

<$mt:Date format="\D\A\Y:j"$> → DAY:23

日付を比較する

先日、「コンテンツの更新日が今日から何日前かどうか判別してアイコンを表示する」という機能を作ることがありました。
要するに日付の比較です。
ここでは、記事の公開日と今の日付を比較する例を作ってみます。

MTの場合

「%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の場合

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」

「unixtime」と「strtotime」は相互関係です。

<$mt:Date strtotime ts="2021-03-08 19:00:00"$> → 1615197600
<$mt:Date unixtime="1615197600"$> → 2021-03-08 19:00:00

<mt:Date>のタグ属性「unixtime」

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より実装されました。

グローバルモディファイア「strtotime」

Ymd形式をUnixタイムスタンプに変換します。
こちらはグローバルモディファイアなので、どこにでも使えます。

現在の日時をUnixタイムスタンプに変換

<$mt:Date strtotime$> → 1615199619

タグ属性「ts」で指定した日時をUnixタイムスタンプに変換

<$mt:Date ts="2021-03-08 19:33:39" strtotime$> → 1615199619

変数に指定した日時をUnixタイムスタンプに変換

<$mt:SetVar name="SET_date" value="2021-03-08"$>
<$mt:Var name="SET_date" strtotime$> → 1615129200

「strtotime」に文字列などを指定

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> → 来月の最初の日

<mt:Date>のタグ属性「format_name」

PowerCMS X Ver3.0から、「format_name」が追加されました。
Movable Typeにも同名のモディファイアがありましたが基本同じです。

rfc822

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"$>

iso8601

ISO規格の日付形式です。(例:2021-12-14T11:36:41+0900)

<$mt:Date format_name="iso8601"$>
<$mt:Date format="Y-m-d\TH:i:s+0900"$>

RSS

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

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"$>

W3C

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」モディファイアが正常に動作しないケースを修正しました。

グローバルモディファイア「date_modify」

PowerCMS X Ver3.0から、「date_modify」が追加されました。
機能的にはPHPの同名の関数と同じです。タイムスタンプに変更します。

「date_modify」に文字列などを指定

<$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の構築ご依頼お待ちしております。

「PowerCMS X」は、どんどんバージョンが上がっていって追加機能を把握するのも大変ですが、そのぶん使いやすくなっているので面白いCMSです。オススメです。

MONSTER DIVEでは、おなじみMovable TypeからPowerCMS Xまで構築経験がありますので、ぜひご相談くださいませ。
Movable Type カスタマイズ構築サービス

Recent Entries
MD EVENT REPORT
What's Hot?