Movable Type のブログ記事の公開日時を年号(元号)で表示する

Movable Type のブログ記事の公開日時( entryData )などを「平成」などの年号(元号)にする方法を考えてみました。

例えば、このブログ記事の公開日時を次のようなタグで出力してみます。

<$mt:EntryDate format="%x (%a)"$>

これを再構築すると次のように出力されます。

<$mt:EntryDate format="%x (%a)"$>

こういった出力形式であれば、「日付に関するテンプレートタグのモディファイアリファレンス | Movable Type 4 ドキュメント」にあるとおり、format モディファイアで対応可能です。しかし、「平成」などの元号表示には、format モディファイアでは対応できません。

そこで変数を使って「年号表示」をする方法を考えてみました。

ブログ記事の公開日時を年号(元号)にするソース

「平成」のみに対応させる場合

まず単純に西暦を「平成」にするソースは次のようになります。

<mt:SetVarBlock name="entry_date_heisei"><$mt:EntryDate format="%Y"$></mt:SetVarBlock>
<mt:SetVar name="entry_date_heisei" op="-" value="1988">
平成<$mt:GetVar name="entry_date_heisei"$>年

1 行目で変数 entry_date_heisei に 4 桁表記の西暦を代入します。

2 行目で変数 entry_date_heisei から 1988 を引いた数値で変数の値を上書きします。

3 行目でその変数に「平成」と「年」を付けて出力します。

後は、この変数に format モディファイア設定した entryDate タグで日付や曜日を出力して、年号と合わせればOKです。

「昭和」と「平成」に対応させる場合

「昭和」に対応させるにはもうひと工夫必要です。

「昭和」は1989年1月7日まで、「平成」は1月8日からとなります。それだけであれば、単純に1989年1月8日で条件分岐すれば良いのですが、平成1年1月8日から12月31日は「平成元年」とするのが一般的ですので、それも考慮して条件分岐をしなければなりません。

  • 1989年1月8日以前 : 「昭和」
  • 1989年1月8日から1989年12月31日 : 「平成元年」
  • 1990年1月1日以降 : 「平成」

これを考慮したソースは次のようになります。先ほどは、変数 entry_date_heisei には平成 xx 年に対する年の数値( xx )しか入れませんでしたが、次は年号自体が変わってくるので、変数に「平成 xx 年」となるように「年号」と「年」も入れてしまいます。

<!-- 公開日を yyyymmdd の形式で取得 -->
<mt:SetVarBlock name="entry_date_nengou"><$mt:EntryDate format="%Y%m%d"$></mt:SetVarBlock>

<!-- 3パターンで条件分岐 -->
<!-- 1989年1月8日以前 : 「昭和」 -->
<mt:If name="entry_date_nengou" lt="19890108">
 <mt:SetVarBlock name="entry_date_nengou"><$mt:EntryDate format="%Y"$></mt:SetVarBlock>
 <mt:SetVar name="entry_date_nengou" op="-" value="1925">
 <mt:SetVarBlock name="entry_date_nengou">昭和<$mt:GetVar name="entry_date_nengou"$>年</mt:SetVarBlock>
<!-- 1989年1月8日から1989年12月31日 : 「平成元年」 -->
<mt:ElseIf name="entry_date_nengou" ge="19890108" lt="19900101">
 <mt:SetVarBlock name="entry_date_nengou"><$mt:EntryDate format="%Y"$></mt:SetVarBlock>
 <mt:SetVarBlock name="entry_date_nengou">平成元年</mt:SetVarBlock>
<!-- 1990年1月1日以降 : 「平成」 -->
<mt:ElseIf name="entry_date_nengou" ge="19900101">
 <mt:SetVarBlock name="entry_date_nengou"><$mt:EntryDate format="%Y"$></mt:SetVarBlock>
 <mt:SetVar name="entry_date_nengou" op="-" value="1988">
 <mt:SetVarBlock name="entry_date_nengou">平成<$mt:GetVar name="entry_date_nengou"$>年</mt:SetVarBlock>
</mt:If>

さて、変数 entry_date_nengou に entryDate タグではなく直接数値をセットして出力結果をテストしてみます。

【 19760101 の場合】

197601011976昭和<$mt:GetVar name="entry_date_nengou"$>年<$mt:EntryDate format="%Y"$>平成元年<$mt:EntryDate format="%Y"$>平成<$mt:GetVar name="entry_date_nengou"$>年
  • 出力希望 : 昭和51年
  • 出力結果 : <$mt:GetVar name="entry_date_nengou"$>

【 19890107 の場合】

198901071989昭和<$mt:GetVar name="entry_date_nengou"$>年<$mt:EntryDate format="%Y"$>平成元年<$mt:EntryDate format="%Y"$>平成<$mt:GetVar name="entry_date_nengou"$>年
  • 出力希望 : 昭和64年
  • 出力結果 : <$mt:GetVar name="entry_date_nengou"$>

【 19890108 の場合】

198901081989昭和<$mt:GetVar name="entry_date_nengou"$>年1989平成元年<$mt:EntryDate format="%Y"$>平成<$mt:GetVar name="entry_date_nengou"$>年
  • 出力希望 : 平成元年
  • 出力結果 : <$mt:GetVar name="entry_date_nengou"$>

【 19900101 の場合】

199001011989昭和<$mt:GetVar name="entry_date_nengou"$>年1989平成元年1990平成<$mt:GetVar name="entry_date_nengou"$>年
  • 出力希望 : 平成2年
  • 出力結果 : <$mt:GetVar name="entry_date_nengou"$>

【 <$mt:EntryDate format="%Y%m%d"$> の場合】

<$mt:EntryDate format="%Y%m%d"$><$mt:EntryDate format="%Y"$>昭和<$mt:GetVar name="entry_date_nengou"$>年<$mt:EntryDate format="%Y"$>平成元年<$mt:EntryDate format="%Y"$>平成<$mt:GetVar name="entry_date_nengou"$>年
  • 出力希望 : 平成20年
  • 出力結果 : <$mt:GetVar name="entry_date_nengou"$>

使用例

上記のそれぞれの場合のソースで事前に変数に値をセットした後、以下のように GetVar タグで値を出力します。

「平成」のみに対応させる場合

<$mt:EntryDate format="%Y"$>

【平成<$mt:GetVar name="entry_date_heisei"$>年<$mt:EntryDate format="%b月%e日(%a)"$>】

平成<$mt:GetVar name="entry_date_heisei"$>年<$mt:EntryDate format="%b月%e日(%a)"$>

【<$mt:EntryDate format="%Y年"$>(平成<$mt:GetVar name="entry_date_heisei"$>年)<$mt:EntryDate format="%b月%e日(%a)"$>】

<$mt:EntryDate format="%Y年"$>(平成<$mt:GetVar name="entry_date_heisei"$>年)<$mt:EntryDate format="%b月%e日(%a)"$>

「昭和」と「平成」に対応させる場合

【 yyyy年(年号xx年)mm月dd日(曜日)】

<$mt:EntryDate format="%Y年"$>(<$mt:GetVar name="entry_date_nengou"$>)<$mt:EntryDate format="%b月%e日(%a)"$>

この形式でこのブログ記事事態を再構築した結果は次のとおりです。

  • <$mt:EntryDate format="%Y年"$>(<$mt:GetVar name="entry_date_nengou"$>)<$mt:EntryDate format="%b月%e日(%a)"$>

この考え方で、さらに条件分岐すれば「昭和」など過去の年号にも対応できます。

【2008-10-27 追記】

「昭和」にも対応できるパターンの記述を追加しました。

以上です。