前後の日時を求めるプラグイン

MTQに「『公開日』の『7日後』の文字を表示したい」という質問が上がっていました。
そこで、このような処理を行うプラグインを作ってみました。

1.インストール

プラグインは以下からダウンロードします。

DateDiff_1_00.zip

ダウンロードしたZipファイルを解凍すると、「plugins」というフォルダができます。
このフォルダを、Movable Typeのインストール先ディレクトリにアップロードします。

なお、このプラグインの動作テストは、Movable Type 5.14で行いました。
試してはいませんが、Movable Type 4以降なら動作するはずです。

2.MTDateDiffタグ

このプラグインをインストールすると、「MTDateDiff」というタグが追加されます。
以下のモディファイアを指定して、動作を決めます。

2-1.tag

前後の日時を求めたい日付系テンプレートタグの名前から、先頭の「MT」を除いたものを指定します。
例えば、ブログ記事の日時(MTEntryDate)の前後の日付を求めたい場合は、「tag="EntryDate"」と指定します。

2-2.ts

特定の日時を基準に、その前後の日時を求めたい場合は、「ts="年月日時分秒"」の形でその日時を指定します。
例えば、2012年6月22日12時34分56秒を基準にする場合だと、「ts="20120622123456"」とします。

なお、tagモディファイアとtsモディファイアは、どちらか1つを指定します。
両方を指定すると、tsモディファイアを使います。
また、どちらも指定しなかった場合は、再構築時点の日時を使います。

2-3.offset

前後する日時を指定します。
プラスの値を指定すると、基準の日時から後の日時を求めます。
また、マイナスの値を指定すると、基準の日時から前の日時を求めます。
日時の単位は以下のものを使います。

単位意味
y
n
w
d
h
m
s

例えば、「offset="10d"」とすると、10日後の日時を出力します。
また、「offset="-1n"」とすると、1か月前の日時を出力します。

offsetモディファイアの中に、複数の値を続けて指定することもできます。
例えば、「offset="1n-1d"」と書くと、1か月後(1n)の1日前(-1d)の日時を出力します。

なお、複数の値を続けて書く場合、それぞれの値の前に符号を指定する必要があります。
例えば、「offset="-1n1d"」と書くと、「offset="-1n"」と「offset="1d"」の両方を指定したのと同じになり、「1か月前の1日後」になります。「1か月1日前」にはなりません。
1か月1日前を求めたい場合は、「offset="-1n-1d"」と書きます。

2-4.format

日時系のテンプレートタグのformatモディファイアと同じ書き方で、日時の書式を指定することができます。

3.事例

ブログ記事の日付を元に、その1週間後の日付を出力したい場合は、以下のように書きます。

<$mt:DateDiff tag="EntryDate" offset="1w"$>

2012年6月21日12時34分56秒を基準に、その2時間半前の日時を出力したい場合は、以下のように書きます。

<$mt:DateDiff tag="20120621123456" offset="-2h-30m"$>