【2023年】これからブログを始める人へおすすめの書籍

Kissy

Bloggerのすべての記事に投稿日時と更新日時を表示する

作成: 更新:

投稿日時と更新日時を表示する

Bloggerでブログを書いていて投稿日時と更新日時を表示したいですよね。

もちろん、Bloggerのデータタグには投稿の日時を表すタグがあります。ただ、日時を表すタグはいくつかあって、結局どれ使えばいいの?となってしまったので、記事にしました。

結論は、

  • 投稿日時は「posts.timestampISO8601」から取得
  • 更新日時は「posts.lastUpdateISO8601」から取得
  • ISO8601形式をJavaScriptで日時の文字列に変換する

です。

これが一番正確で、すべての記事に間違いなく表示できるからです。

posts.dateHeaderの先頭のみ表示される問題

「posts.dateHeader」はそのままブログに表示できる表示形式なのでよく使われますが、同じ日に複数記事を投稿した場合、先頭の記事のみに日付が入ります。先頭以外の記事には日付が入りません。

この事実はBloggerのデータタグのヘルプにも明記されているので、周知の事実です。これを回避するため、よく使われているのが、JavaScriptで先頭記事の日付を覚えて使いまわすというものです。

このブログでも、日付が出てない記事ありました。。そうこのブログでも「posts.dateHeader」を使って表示していましたが、JavaScriptでの対策はあまりしたくないなぁ、ということで放置していました。。

どうやって対策するの?

最初に書いた通り、

  • 投稿日時は「posts.timestampISO8601」から取得
  • 更新日時は「posts.lastUpdateISO8601」から取得
  • ISO8601形式をJavaScriptで日時の文字列に変換する
    になります。

結局JavaScript使うんかい。。という感じですが、仕方ないですね。だって他に良い方法がないんだもん。

ソースコード

HTML

<i class="far fa-clock"></i> <time class="published-date" expr:datetime="data:post.timestampISO8601"><data:post.timestampISO8601/></time>
<i class="fas fa-sync-alt"></i> <time class="updated-date" expr:datetime="data:post.lastUpdatedISO8601"><data:post.lastUpdatedISO8601/></time>

JavaScript

var elems = document.querySelectorAll('time');
      Array.prototype.forEach.call(elems, function(elem, index) {
        var date = new Date(elem.innerHTML);
        var date_str = date.getFullYear() + '.' + (date.getMonth()+1) + '.' + date.getDate()
        elem.innerHTML = date_str;
      });

ソースコードの解説

HTML側では、

  • 投稿日時は「posts.timestampISO8601」から取得
  • 更新日時は「posts.lastUpdateISO8601」から取得
    して、それぞれtime要素に値を入れています。

この状態では、日時はISO8601形式です。

JavaScript側では、time要素をすべて取得してISO8601形式の日付を「YYYY.MM.DD」という文字列に変換して設定しなおしています。

最後まで読んでいただきありがとうございます。
またよ読んで下さいませ。
そんじゃーね。

関連記事

SPONSORED LINK
SPONSORED LINK