2018年12月28日金曜日

投稿日時の表示形式を変える【Blogger テーマコーディング】

Blogger の投稿にある投稿日時をもっと自由に変更したい。テーマを少し書き換えて、自分のブログにピッタリの表示方法に変えましょう!

※レイアウトバージョン3、ガジェットバージョン2の、公式のテーマかそれに近い書き方をしている Blogger テーマに対応しています。バージョンの確認は、「テーマ」→「HTMLの編集」で HTML 要素に「b:defaultwidgetversion='2' b:layoutsVersion='3'」の属性があるかで判断可能です。

Blogger の投稿日時の表示形式

公式の Blogger テーマを使っていて、投稿日時の形式の自由度が低いことに気になるようになってきました。投稿日時は、通常は次のように表示されています。

Blogger のテーマ「Notable」の表示例。
ここでは投稿日時は「22:39」と表示されている。

投稿日時の形式は Blogger の設定項目で選べるのですが、時間または日付のどちらか片方しか選べず、しかも日付は年月日の並びではなく、月日年や日月年の並びになります。

Blogger の投稿日時の表示形式を設定する場所。
[レイアウト]→[ブログの投稿]の右上の鉛筆マークから変更可能。

Blogger で用意されている選択肢。あんまり日本人向けではない感じ。

上記のように選択肢が少ないので、年月日の順に並べたいとか、日付に「日」を付けたいとか、日付と時間を同時に表示したいとか、そういう設定がありません。

そこで。

「テーマをちょっと書き換えて対応しちゃおう!」

というのが、今回の趣旨になります。これをやるとこんな感じにできたりします。

  • 2018年12月24日 20時0分
  • '18 12/24 20:00
  • '18 12/24(Mon) 20:00
  • 2018年12月24日(月) 20時0分
  • 二〇一八年一二月二四日 二〇時〇分
  • 二千十八年十二月二十四日 二十時〇分
  • 平成三十年師走二十四日(月曜日)二十時〇分
  • 平成30年12月24日(月) 20時0分

書き換え開始!

この方法では対応しきれないテーマも存在すると思います。その場合は効果がなかったり、場合によっては表示が崩れる可能性もあります。試してみるまでわかりませんので、バックアップは重要です。

1.バックアップ

うまくいかなかったときに元に戻せるように、バックアップは必ず保存しておきましょう。[テーマ]の画面の右上にある[バックアップ/復元]から[テーマをダウンロード]で、PC上のわかりやすい場所に保存してください。

これで、万が一のときは[バックアップ/復元]でバックアップファイルを選択して[アップロード]すれば元に戻せるようになりました。

2.コードを書き換える

バックアップの準備ができたら書き換えを始めていきましょう。テーマの書き換えは[テーマ]→[HTMLの編集]から行います。

[ウィジェットへ移動]ボタンから[Blog1]を選び、<b:widget id='Blog1' ~~ > と書かれた部分を開いてみてください。

その中に <b:includable id='postTimestamp'> というものが無ければ次のコードをまるごと </b:widget> の直前にコピーしてください。ある場合は <data:post.date /> と書かれている行を次のコードの赤字の部分(太字を含む)のように書き換えます。
(<b:includable id='postTimestamp'> はあるけど <data:post.date /> がないという場合も、おそらくどこかに日付を記述している部分があるはずなので、ある程度の知識があればご自身で場所を特定して書き換えればできると思います。ただし不安ならやめておきましょう)

<b:includable id='postTimestamp'>
  <span class='byline post-timestamp'>
    <data:byline.label />
    <b:if cond='data:post.url'>
      <meta expr:content='data:post.url.canonical' />
      <a class='timestamp-link' expr:href='data:post.url' rel='bookmark' title='permanent link'>
        <time class='published' expr:datetime='data:post.date.iso8601' expr:title='data:post.date.iso8601'>
          <b:loop values='0 to 23' var='postdatehour'>
            <b:if cond='data:datetime.iso8601 contains ((data:postdatehour &lt; 10 ? &quot;T0&quot; : &quot;T&quot;) + data:postdatehour)'>
              <b:with value='data:datetime format &quot;m&quot;' var='postdateminute'>
                <data:post.date.year/>年<data:post.date.month/>月<data:post.date.day/>日 <data:postdatehour/>時<data:postdateminute/>分
              </b:with>
            </b:if>
          </b:loop>
        </time>
      </a>
    </b:if>
  </span>
</b:includable>

このコードは、投稿日時を「〇〇〇〇年〇〇月〇〇日 〇〇時〇〇分」の形で表示するためのコードです。これは Blogger Code というサイトにあるコードを元に、主に赤字の部分を自分なりに書き換えたものです。(※2018年12月27日現在、Blogger Code は閉鎖中のため該当ページの URL がわかりません)

一見複雑なコードですが、太字以外の赤字の部分は時間と分を取得するためのコードで、太字で書かれた行が形式になっています。

3.うまくいったか確かめる

[テーマをプレビュー] ボタンを押して確かめてみましょう。「〇〇〇〇年〇〇月〇〇日 〇〇時〇〇分」の形で表示されていれば成功です。保存すればブログに反映されます。

これで成功しないようであれば、この方法では対応できないテーマである可能性があります。テーマのカスタマイズ知識があればどうにかなりますが、そうでなければ保存せずに閉じましょう。もし保存していた場合は最初に用意しておいたバックアップから復元してください。

さらなるカスタマイズ

上記の「〇〇〇〇年〇〇月〇〇日 〇〇時〇〇分」も自分好みの表示ではない、と感じた人もいるかもしれません。単純に記号や順番を変えたいのであれば、先程の太字の部分を見てちょこっと変えるだけで済みます。

また、年を下二桁にしたいとか、月日や時分が一桁の場合に十の位に 0 を付けたいとか、曜日がほしいとか、月を睦月、如月、弥生・・・で表示したいとかもあると思います。

そういうコードになってくると少し複雑なので、カスタマイズ例をいくつか載せていこうと思います。先程のコードの赤い太字の部分を書き換えてください。

'18 12/24 20:00

年月日よりシンプルに書きたい人向け。すべて2桁で表示します。
&#39;<b:eval expr='((data:post.date.year % 100) &lt; 10 ? &quot;0&quot; : &quot;&quot;) + (data:post.date.year % 100)'/> <b:eval expr='(data:post.date.month &lt; 10 ? &quot;0&quot; : &quot;&quot;) + data:post.date.month'/>/<b:eval expr='(data:post.date.day &lt; 10 ? &quot;0&quot; : &quot;&quot;) + data:post.date.day'/> <b:eval expr='(data:postdatehour &lt; 10 ? &quot;0&quot; : &quot;&quot;) + data:postdatehour'/>:<b:eval expr='(data:postdateminute &lt; 10 ? &quot;0&quot; : &quot;&quot;) + data:postdateminute'/>

'18 12/24(Mon) 20:00

よりスタイリッシュに。上記に加えて曜日を英語で出力した例。曜日を並べて書いてある場所を書き換えていただければ、漢字等にも対応可能です。
<b:with value='[&quot;&quot;,&quot;Mon&quot;,&quot;Tue&quot;,&quot;Wed&quot;,&quot;Thu&quot;,&quot;Fri&quot;,&quot;Sat&quot;,&quot;Sun&quot;]' var='syuu'>
  &#39;<b:eval expr='((data:post.date.year % 100) &lt; 10 ? &quot;0&quot; : &quot;&quot;) + (data:post.date.year % 100)'/> <b:eval expr='(data:post.date.month &lt; 10 ? &quot;0&quot; : &quot;&quot;) + data:post.date.month'/>/<b:eval expr='(data:post.date.day &lt; 10 ? &quot;0&quot; : &quot;&quot;) + data:post.date.day'/>(<b:eval expr='data:syuu[data:post.date.dayOfWeek]'/>) <b:eval expr='(data:postdatehour &lt; 10 ? &quot;0&quot; : &quot;&quot;) + data:postdatehour'/>:<b:eval expr='(data:postdateminute &lt; 10 ? &quot;0&quot; : &quot;&quot;) + data:postdateminute'/>
</b:with>

2018年12月24日(月) 20:00

書類ではよくあるけどブログでは珍しい、全角数字を使った日時表記。
<b:with value='[&quot;&quot;,&quot;月&quot;,&quot;火&quot;,&quot;水&quot;,&quot;木&quot;,&quot;金&quot;,&quot;土&quot;,&quot;日&quot;]' var='syuu'>
  <b:with value='[&quot;0&quot;,&quot;1&quot;,&quot;2&quot;,&quot;3&quot;,&quot;4&quot;,&quot;5&quot;,&quot;6&quot;,&quot;7&quot;,&quot;8&quot;,&quot;9&quot;]' var='kansuuji'>
    <b:eval expr='data:kansuuji[(data:post.date.year - (data:post.date.year % 1000)) / 1000]'/><b:eval expr='data:kansuuji[((data:post.date.year - (data:post.date.year % 100)) / 100) % 10]'/><b:eval expr='data:kansuuji[((data:post.date.year - (data:post.date.year % 10)) / 10) % 10]'/><b:eval expr='data:kansuuji[data:post.date.year % 10]'/>年<b:if cond='data:post.date.month &gt; 9'><b:eval expr='data:kansuuji[(data:post.date.month - (data:post.date.month % 10)) / 10]'/></b:if><b:eval expr='data:kansuuji[data:post.date.month % 10]'/>月<b:if cond='data:post.date.day &gt; 9'><b:eval expr='data:kansuuji[(data:post.date.day - (data:post.date.day % 10)) / 10]'/></b:if><b:eval expr='data:kansuuji[data:post.date.day % 10]'/>日&#65288;<b:eval expr='data:syuu[data:post.date.dayOfWeek]'/>&#65289;&#12288;<b:if cond='data:postdatehour &gt; 9'><b:eval expr='data:kansuuji[((data:postdatehour - (data:postdatehour % 10)) / 10) % 10]'/></b:if><b:eval expr='data:kansuuji[data:postdatehour % 10]'/>時<b:if cond='data:postdateminute &gt; 9'><b:eval expr='data:kansuuji[((data:postdateminute - (data:postdateminute % 10)) / 10) % 10]'/></b:if><b:eval expr='data:kansuuji[data:postdateminute % 10]'/>分
  </b:with>
</b:with>

二〇一八年一二月二四日 二〇時〇分

和風ブログに似合いそうな漢数字を使った日時表記。全角数字の漢数字置き換えバージョン。
<b:with value='[&quot;〇&quot;,&quot;一&quot;,&quot;二&quot;,&quot;三&quot;,&quot;四&quot;,&quot;五&quot;,&quot;六&quot;,&quot;七&quot;,&quot;八&quot;,&quot;九&quot;]' var='kansuuji'>
  <b:eval expr='data:kansuuji[(data:post.date.year - (data:post.date.year % 1000)) / 1000]'/><b:eval expr='data:kansuuji[((data:post.date.year - (data:post.date.year % 100)) / 100) % 10]'/><b:eval expr='data:kansuuji[((data:post.date.year - (data:post.date.year % 10)) / 10) % 10]'/><b:eval expr='data:kansuuji[data:post.date.year % 10]'/>年<b:if cond='data:post.date.month &gt; 9'><b:eval expr='data:kansuuji[(data:post.date.month - (data:post.date.month % 10)) / 10]'/></b:if><b:eval expr='data:kansuuji[data:post.date.month % 10]'/>月<b:if cond='data:post.date.day &gt; 9'><b:eval expr='data:kansuuji[(data:post.date.day - (data:post.date.day % 10)) / 10]'/></b:if><b:eval expr='data:kansuuji[data:post.date.day % 10]'/>日&#12288;<b:if cond='data:postdatehour &gt; 9'><b:eval expr='data:kansuuji[((data:postdatehour - (data:postdatehour % 10)) / 10) % 10]'/></b:if><b:eval expr='data:kansuuji[data:postdatehour % 10]'/>時<b:if cond='data:postdateminute &gt; 9'><b:eval expr='data:kansuuji[((data:postdateminute - (data:postdateminute % 10)) / 10) % 10]'/></b:if><b:eval expr='data:kansuuji[data:postdateminute % 10]'/>分
</b:with>

二千十八年十二月二十四日 二十時〇分

漢数字その2。漢数字に桁の表記ありバージョン。千の桁、百の桁、十の桁、一の桁でそれぞれ0~9に対応する言葉を全て列挙して、それを結合しています。列挙されている数字をすべて書き換えれば「弐阡壱拾八年壱拾弐月弐拾四日」などの表示も可能です。
<b:with value='[&quot;&quot;,&quot;千&quot;,&quot;二千&quot;,&quot;三千&quot;,&quot;四千&quot;,&quot;五千&quot;,&quot;六千&quot;,&quot;七千&quot;,&quot;八千&quot;,&quot;九千&quot;]' var='kansuujisen'>
  <b:with value='[&quot;&quot;,&quot;百&quot;,&quot;二百&quot;,&quot;三百&quot;,&quot;四百&quot;,&quot;五百&quot;,&quot;六百&quot;,&quot;七百&quot;,&quot;八百&quot;,&quot;九百&quot;]' var='kansuujihyaku'>
    <b:with value='[&quot;&quot;,&quot;十&quot;,&quot;二十&quot;,&quot;三十&quot;,&quot;四十&quot;,&quot;五十&quot;,&quot;六十&quot;,&quot;七十&quot;,&quot;八十&quot;,&quot;九十&quot;]' var='kansuujijuu'>
      <b:with value='[&quot;零&quot;,&quot;一&quot;,&quot;二&quot;,&quot;三&quot;,&quot;四&quot;,&quot;五&quot;,&quot;六&quot;,&quot;七&quot;,&quot;八&quot;,&quot;九&quot;]' var='kansuujiichi'>
        <b:eval expr='data:kansuujisen[((data:post.date.year - (data:post.date.year % 1000)) / 1000) % 10]'/><b:if cond='(data:post.date.year % 1000) &gt; 99'><b:eval expr='data:kansuujihyaku[((data:post.date.year - (data:post.date.year % 100)) / 100) % 10]'/></b:if><b:if cond='(data:post.date.year % 100) &gt; 9'><b:eval expr='data:kansuujijuu[((data:post.date.year - (data:post.date.year % 10)) / 10) % 10]'/></b:if><b:if cond='data:post.date.year &lt; 9 or (data:post.date.year % 10) &gt; 0'><b:eval expr='data:kansuujiichi[data:post.date.year % 10]'/></b:if>年<b:if cond='data:post.date.month &gt; 9'><b:eval expr='data:kansuujijuu[(data:post.date.month - (data:post.date.month % 10)) / 10]'/></b:if><b:if cond='data:post.date.month &lt; 9 or (data:post.date.month % 10) &gt; 0'><b:eval expr='data:kansuujiichi[data:post.date.month % 10]'/></b:if>月<b:if cond='data:post.date.day &gt; 9'><b:eval expr='data:kansuujijuu[(data:post.date.day - (data:post.date.day % 10)) / 10]'/></b:if><b:if cond='data:post.date.day &lt; 9 or (data:post.date.day % 10) &gt; 0'><b:eval expr='data:kansuujiichi[data:post.date.day % 10]'/></b:if>日&#12288;<b:if cond='data:postdatehour &gt; 9'><b:eval expr='data:kansuujijuu[((data:postdatehour - (data:postdatehour % 10)) / 10) % 10]'/></b:if><b:if cond='data:postdatehour &lt; 9 or (data:postdatehour % 10) &gt; 0'><b:eval expr='data:kansuujiichi[data:postdatehour % 10]'/></b:if>時<b:if cond='data:postdateminute &gt; 9'><b:eval expr='data:kansuujijuu[((data:postdateminute - (data:postdateminute % 10)) / 10) % 10]'/></b:if><b:if cond='data:postdateminute &lt; 9 or (data:postdateminute % 10) &gt; 0'><b:eval expr='data:kansuujiichi[data:postdateminute % 10]'/></b:if>分
      </b:with>
    </b:with>
  </b:with>
</b:with>

平成三十年師走二十四日(月曜日) 二十時零分

元号+和風月名+漢数字(桁あり)+曜日の和風フルコース。Blogger は1970年より前に投稿日時を設定できないので、「昭和」と「平成」に対応し、それと2019年5月1日から予定されている新元号を入れる場所も用意しました。ちなみに、元号がかわる日付より前か後かで年の表記が変わるようにしています。また、1年目は「元年」で表記します。新元号が発表されたら「平成の後」と書いてある部分を書き換えてください。

もし元号が変わる場合、そのたびに追記が必要です。元号が始まる日付を nennhajime の「,99999999」の前に「,年(4桁)月(2桁)日(2桁)」の形で追加し、元号を genngou の「]」の前に「,&quot;元号&quot;」の形で追加してください。
<b:with value='[&quot;&quot;,&quot;十&quot;,&quot;二十&quot;,&quot;三十&quot;,&quot;四十&quot;,&quot;五十&quot;,&quot;六十&quot;,&quot;七十&quot;,&quot;八十&quot;,&quot;九十&quot;]' var='kansuujijuu'>
  <b:with value='[&quot;零&quot;,&quot;一&quot;,&quot;二&quot;,&quot;三&quot;,&quot;四&quot;,&quot;五&quot;,&quot;六&quot;,&quot;七&quot;,&quot;八&quot;,&quot;九&quot;]' var='kansuujiichi'>
    <b:with value='[&quot;睦月&quot;,&quot;如月&quot;,&quot;弥生&quot;,&quot;卯月&quot;,&quot;皐月&quot;,&quot;水無月&quot;,&quot;文月&quot;,&quot;葉月&quot;,&quot;長月&quot;,&quot;神無月&quot;,&quot;霜月&quot;,&quot;師走&quot;]' var='tsuki'>
      <b:with value='[&quot;&quot;,&quot;月曜日&quot;,&quot;火曜日&quot;,&quot;水曜日&quot;,&quot;木曜日&quot;,&quot;金曜日&quot;,&quot;土曜日&quot;, &quot;日曜日&quot;]' var='syuu'>
        <b:with value='[19261225,19890108,20190501,99999999]' var='nennhajime'>
          <b:with value='[&quot;昭和&quot;,&quot;平成&quot;,&quot;平成の後&quot;]' var='genngou'>
            <b:loop index='genngouidx' values='data:genngou' var='genngou'><b:if cond='((data:post.date.year * 10000 + data:post.date.month * 100 + data:post.date.day) &gt;= data:nennhajime[data:genngouidx]) and ((data:post.date.year * 10000 + data:post.date.month * 100 + data:post.date.day) &lt; data:nennhajime[data:genngouidx+1])'><b:eval expr='data:genngou'/><b:with value='data:post.date.year - (data:nennhajime[data:genngouidx] - data:nennhajime[data:genngouidx] % 10000) / 10000 + 1' var='postdateyear'><b:if cond='(data:postdateyear % 100) &gt; 9'><b:eval expr='data:kansuujijuu[((data:postdateyear - (data:postdateyear % 10)) / 10) % 10]'/></b:if><b:if cond='data:postdateyear &lt; 9 or (data:postdateyear % 10) &gt; 0'><b:eval expr='data:postdateyear == 1 ? &quot;元&quot; : data:kansuujiichi[data:postdateyear % 10]'/></b:if></b:with>年</b:if></b:loop><b:eval expr='data:tsuki[data:post.date.month - 1]'/><b:if cond='data:post.date.day &gt; 9'><b:eval expr='data:kansuujijuu[(data:post.date.day - (data:post.date.day % 10)) / 10]'/></b:if><b:if cond='data:post.date.day &lt; 9 or (data:post.date.day % 10) &gt; 0'><b:eval expr='data:kansuujiichi[data:post.date.day % 10]'/></b:if>日&#65288;<b:eval expr='data:syuu[data:post.date.dayOfWeek]'/>&#65289;<b:if cond='data:postdatehour &gt; 9'><b:eval expr='data:kansuujijuu[((data:postdatehour - (data:postdatehour % 10)) / 10) % 10]'/></b:if><b:if cond='data:postdatehour &lt; 9 or (data:postdatehour % 10) &gt; 0'><b:eval expr='data:kansuujiichi[data:postdatehour % 10]'/></b:if>時<b:if cond='data:postdateminute &gt; 9'><b:eval expr='data:kansuujijuu[((data:postdateminute - (data:postdateminute % 10)) / 10) % 10]'/></b:if><b:if cond='data:postdateminute &lt; 9 or (data:postdateminute % 10) &gt; 0'><b:eval expr='data:kansuujiichi[data:postdateminute % 10]'/></b:if>分
          </b:with>
        </b:with>
      </b:with>
    </b:with>
  </b:with>
</b:with>

平成30年12月24日(月) 20:00

上記のものを全角アラビア数字を使って書き直してみました。こっちのほうが親しみが湧きますね。元号についての詳細は一つ前の説明を参照してください。

この元号表示をうまく使えば「わたし歴31年」とか、「中学時代2年」とか「結婚歴元年」のように個性的なブログも作れるかもしれません。
<b:with value='[&quot;&quot;,&quot;月&quot;,&quot;火&quot;,&quot;水&quot;,&quot;木&quot;,&quot;金&quot;,&quot;土&quot;,&quot;日&quot;]' var='syuu'>
  <b:with value='[&quot;0&quot;,&quot;1&quot;,&quot;2&quot;,&quot;3&quot;,&quot;4&quot;,&quot;5&quot;,&quot;6&quot;,&quot;7&quot;,&quot;8&quot;,&quot;9&quot;]' var='suuji'>
    <b:with value='[19261225,19890108,20190501,99999999]' var='nennhajime'>
      <b:with value='[&quot;昭和&quot;,&quot;平成&quot;,&quot;平成の後&quot;]' var='genngou'>
        <b:loop index='genngouidx' values='data:genngou' var='genngou'><b:if cond='((data:post.date.year * 10000 + data:post.date.month * 100 + data:post.date.day) &gt;= data:nennhajime[data:genngouidx]) and ((data:post.date.year * 10000 + data:post.date.month * 100 + data:post.date.day) &lt; data:nennhajime[data:genngouidx+1])'><b:eval expr='data:genngou'/><b:with value='data:post.date.year - (data:nennhajime[data:genngouidx] - data:nennhajime[data:genngouidx] % 10000) / 10000 + 1' var='postdateyear'><b:if cond='data:postdateyear &gt; 9'><b:eval expr='data:suuji[((data:postdateyear - (data:postdateyear % 10)) / 10) % 10]'/></b:if><b:eval expr='data:postdateyear == 1 ? &quot;元&quot; : data:suuji[data:postdateyear % 10]'/></b:with></b:if></b:loop>年<b:if cond='data:post.date.month &gt; 9'><b:eval expr='data:suuji[(data:post.date.month - (data:post.date.month % 10)) / 10]'/></b:if><b:eval expr='data:suuji[data:post.date.month % 10]'/>月<b:if cond='data:post.date.day &gt; 9'><b:eval expr='data:suuji[(data:post.date.day - (data:post.date.day % 10)) / 10]'/></b:if><b:eval expr='data:suuji[data:post.date.day % 10]'/>日&#65288;<b:eval expr='data:syuu[data:post.date.dayOfWeek]'/>&#65289;&#12288;<b:if cond='data:postdatehour &gt; 9'><b:eval expr='data:suuji[((data:postdatehour - (data:postdatehour % 10)) / 10) % 10]'/></b:if><b:eval expr='data:suuji[data:postdatehour % 10]'/>時<b:if cond='data:postdateminute &gt; 9'><b:eval expr='data:suuji[((data:postdateminute - (data:postdateminute % 10)) / 10) % 10]'/></b:if><b:eval expr='data:suuji[data:postdateminute % 10]'/>分
      </b:with>
    </b:with>
  </b:with>
</b:with>

まとめ

Blogger のテーマを書き換えて投稿日時を変える方法を紹介しました。また、複雑な処理を必要とするいくつかの形式も併せて紹介しました。これらを組み合わせていけば、さらに面白い形式もできるかも知れません。

特に元号や漢数字のあたりはかなり頑張ったので、和風なブログを作る際の助けになれば嬉しいです!

それでは!

0 件のコメント :

コメントを投稿