日付を比較して真偽を返すMTDateDiffタグ

公開

JavaScriptを使わずMTMLで新着記事に「New!」とか付けるというよくある話なのですが、「日付の比較をどうしようか」となりました。Googleで検索してみたものの、ひと目見ても分からないテンプレートだったり、PHPが混ざっていたり...。「お前らのMTMLは間違っている」と言われそうですね。というわけで、プラグインを書いてみました。(既にあったりして。)

たいして難しくないと思ったものの、Perlで日付の比較をするのが思いのほか手間でした。PHPの方が簡単。特に深い意味はないですが、時刻までは考慮していません。(00:00:00で判定します。)

主に自分用なので細かいことはカスタマイズして使おうと思っていますが、参考までに公開しておきます。日付を変数に入れるのが手間なので、その辺りを改良するかも。

仕様

nameで指定した変数に格納されている日付(YYYYMMDD)と再構築時の日付を比較し、intervalで指定した範囲内である場合は真になるコンディショナルタグプラグインです。

intervalの考え方

今日から7日先まで
interval="7"
今日から7日前まで
interval="-7"

サンプルコード

7日以内の記事にNewを付ける

<mt:Entries>
<mt:EntriesHeader><ul></mt:EntriesHeader>
<$mt:EntryDate format="%Y%m%d" setvar="tmp__today"$>
<li><mt:DateDiff name="tmp__today" interval="-7">[New!]</mt:DateDiff> <$mt:EntryTitle escape="html"$></li>
<mt:EntriesFooter></ul></mt:EntriesFooter>
</mt:Entries>

ダウンロード

hideki-a/mt-plugin-datediffに格納してあります。