【Blogger】続・コメントのタイムスタンプを時刻なしの yyyy/MM/dd 形式にする

以前、【Blogger】コメントのタイムスタンプを時刻なしの yyyy/MM/dd 形式にするという記事を書いた。

当時はそこで紹介したスクリプトで満足していたけれど、時が経つにつれ改善したい点が見つかった。

そこで今回は、コメントのタイムスタンプを時刻なしの yyyy/MM/dd 形式にするスクリプトのバージョン2を作成したのでここに書き記す。

前回作ったスクリプトの問題点

新しく作ったスクリプトを紹介する前に、前回作ったものはここが問題だったなというところを挙げていく。

ページの表示速度に影響が出そう

前回のスクリプトの設置場所はコメント表示部分の b:loop タグの中だった。

コメントの数だけ b:loop の中に書かれた記述が繰り返し出力されるため、当然スクリプトも同じだけ追加される。

1ページにつき数件しかコメントが来ません!みたいなブログだったらそれほど表示速度に影響はないと思うけれど、当ブログの使い方だと1ページに何十件何百件とコメントが表示されることになるから多少は影響が出そうだ。

for 文を使えば設置するスクリプトがひとつで済むから、少しは軽くならないかなと考えた。

その気になれば時刻が特定できてしまう

前回のスクリプトでは、コメントのタイムスタンプ表示に Blogger 独自タグの <data:post.comment.timestampValue/> を使用した。

この独自タグは 1970/01/01 00:00:00 からコメントが投稿された時刻までに経過したミリ秒数(下4桁は 0000 で固定)を出力するもので、当然このミリ秒数はソースコード上にもバッチリ表示される。

だから、new Date(...)... をその数字に置き換えてどっかで実行しちゃったら、どのみちコメントした時刻がわかってしまう。

誰がそんなことすんねんとは思いつつも、時刻がバレる可能性が 0.001% でもあるならば、その芽は摘んでおかねばなるまい。いや深夜にコメントしなければいいだけの話では?

今回作ったスクリプトの導入方法

まず、Blogger 管理画面の 設定 > フォーマット > コメントのタイムスタンプの形式 で、上から10個目の形式(下の画像で 1/07/2023 となっているところ)を選択して保存する。

コメントのタイムスタンプの形式

次にテーマの HTML 編集画面に飛び、コメント表示部分の b:loop 内の投稿時刻を表示させたい部分に以下のコードを追加する。

<p class='comment-timestamp' expr:data-timestamp='data:comment.timestamp'><noscript><data:comment.timestamp/></noscript></p>

コメントのタイムスタンプを表示させる独自タグ data:comment.timestamp を仕込む場所を、.comment-timestamp の内部テキストから data-timestamp 属性値に変えてみた。

最後に以下のコードを追加する。設置場所は </body> の上らへんが好ましいけれど、DOMContentLoaded 使ってるからある程度はどこでもいけるはず。

<b:if cond='data:view.isSingleItem'>
<script>//<![CDATA[
window.addEventListener('DOMContentLoaded', function(){
  const ts = document.querySelectorAll('.comment-timestamp[data-timestamp]');
  if(ts.length == 0){
    return
  }
  let date, y, md;
  for(let i = 0; ts.length > i; i++){
    date = ts[i].dataset.timestamp;
    if(date.length == 9){
      y = date.slice(5,9);
      md = '0' + date.slice(0,4);
    } else{
      y = date.slice(6,10);
      md = date.slice(0,5);
    }
    ts[i].innerText = y + '/' + md
  }
});
//]]></script>
</b:if>

設定した形式のタイムスタンプを slice(...) で年 y と月日 md に分けて、最後に組み直している。

月が1桁(1~9月)のときと2桁(10~12月)のときとで独自タグで出力されるタイムスタンプの桁数が異なるので、if 文で場合分けをして1桁月のときはゼロパディングして桁数を揃えてみた。

JavaScript が無効の場合でも、noscript 内のBlogger の独自タグによって日付自体は表示されるから安心だ。

あとがき

前回作った、コメントのタイムスタンプを時刻なしの yyyy/MM/dd 形式にするスクリプトにはいくつか問題があったので、やはり JavaScript を駆使してなんとかしてみた。

また使っていくうちに問題点が出てきそうな予感がするけれど、もう同じテーマで新しく記事は書かない。だってキリがないから。この記事にそっと修正を加えておくぐらいでいいかな。

というかブログにあとがきって必要? 記事に“終わった”感が欲しくていつも形式的に書いてるんだけど、ぶっちゃけ書くことなくて無理やりひねり出してることとかよくある。書きたいときだけ書けばいいか。解決!

編集
ホーム