gengou.js:日付を後付けで元号表示にする
ブログ記事の上の日付とかを西暦から元号に変えるための JavaScript。最初の紹介はいちおう [cocolog:78797141] になるが、ほぼ説明してない。このサイトで使ってるので、どういう感じになるかは PC でこのサイトを見てればわかるはず。使い方は、次をページ(ブログテンプレートとか)で JavaScript をロードしてる部分に足すだけ。
<script type="text/javascript" src="http://jrf.cocolog-nifty.com/archive/lib/gengou.js"></script>
<script type="text/javascript">
<!--
add_event_listener_rewrite_gengou("//div[@class='content']/h2");
add_event_listener_rewrite_gengou("//div[@class='sticky-entry']/h2");
-->
</script>
どの日付を換えるかは、上の add_event_listener_rewrite_gengou の引数の XPath で指定してるので、そこを変えればほぼどんなサイトでも使えるはず。
もちろん、gengou.js はダウンロードして自分のサイトに置いて使ったほうがいい。そのときは、内部で古いブラウザ用にここから取ってきた XPath のライブラリを使ってるので、それもいっしょに置いて、ソースの GENGOU_XPATH_JS で指定すること。(どうせならと、XPath 2.0とかを選ぶ人もいるかもしれないけど。)
ただ、このスクリプト、元号は直近の記事分は変わらないようになってて、「その日以降元号にする」という部分は、ソース直書きになる。そこはソース中の↓の "2014-02-12" を最新の日付に更新しさえすればいい。私は(生きてれば)だいたい3ヶ月ごとに更新していくはず。三つ組の最後の部分は終了日で、ネット時代になってからずっと平成なので null のまま、ソースには「ももくり三年」にちなんだ例が載ってて、"平成%(数)G年%(和)m%(数)d日" と指定して「平成二十六年如月十一日」と漢数字化するような例も載ってる。
var Gengou = [
[null, "2019-04-30", null],
["平成%(半)G年(%Y年) %_m月%_d日", "1989-01-08", null]
];
一番上でリンクしたひとことでも書いたんだけど、私が死んだあと誰かがここを引き継ぐと、デフォルトでは元号の表示が切れるわけで、そこは少し失礼にあたる。ずっと同じ元号のほうが失礼が薄いという考え方もあるのは知ってるが、私の後継者が万一現れたとき、よくわからないまま、この先のすごい高齢化社会において「新しく若い元号」を認めないような形になるのをむしろ避けたかった。
そういうことだから、このスクリプトを自分のとこにおけないと、私の更新が止まれば元号表示が止まっちゃう。こういうスクリプトの提供は政府がやってくれたら便利なんだけどね…。政府だと責任とか小回りの点で難しかったら、神社の団体とか、特定のデカい神社とかがやってくれたらありがたいのに。(いちおう、最新の JavaScript には Intl.DateTimeFormat とかいう機能があるらしいけど…。)
「素人」が自分のサイトで使うために作っただけなので、コード品質は「良い」とは言えないと思う。ただ、その程度なのでパブリックドメインが著者たる私の意志。商用だろうが改造しようが、お好きに使っていただいても私は文句言いません。
更新:2014-02-08,2014-02-11,2019-02-21
初公開:2014年02月08日 00:37:43
最新版:2019年02月21日 00:26:38
Comments:
[E:despair] 更新:記事を書いたあと確認すると、IE でなぜか元号表示になってない!前はうまく行ってたのに…。
調べると、xpath のモジュールを「インクルード」するときに、document.body ができてなかったため、ちょっとダーティだが、そのときは HEAD の部分で include するようにした。(しかも、IE6 だと document.head じゃダメで、document.getElementsByTagName('head')[0] にしないとダメ。Thanks→《javascript - document.head.appendChild or document.createElement not working in IE - Stack Overflow》。)
いろいろやってて、Time-Stamp は名前と合ってないけど、前の分は gengou-20140129.js に、今回の分は gengou-20140208.js にアーカイブしておいた。
投稿: JRF | 2014-02-08 02:12:12 (JST)
[E:basketball] 更新:gengou-20140211.js。バージョン 0.03。
POSIX や GNU の strftime とか date コマンドとかで使えるフォーマットで書くように改めた。もちろん全部が使えるわけではなくサブセット…下位互換にしたということ。ただし、和暦年数指定の "%G" だけは、それらと違う意味になっている。
内部的にはかなり大きな変更で、またまた IE6 のオブジェクトのプロパティリストがらみのシンタックスエラーに悩んでいた。一番最後のカンマの問題ではなく、最後、「ケツカンマ」を避けるために { null: null } みたいにしたところ、最初の null がプロパティとして指定してはいけないたぐいのものらしくエラーになっていた。
投稿: JRF | 2014-02-11 23:25:42 (JST)
[E:tennis] 更新: gengou-20190221.js。バージョン 0.04。
「元年」に対応した。半角数字を普段使うが元年だけ漢字にしたいときは、上のように (半) を使う。
投稿: JRF | 2019-02-21 00:29:48 (JST)
Links:
XPath: http://msugai.fc2web.com/java/XML/XPath.html (hbm)
gengou.js: http://jrf.cocolog-nifty.com/archive/lib/gengou.js
ここ: http://coderepos.org/share/wiki/JavaScript-XPath (hbm)
Intl.DateTimeFormat とかいう機能があるらしい: http://3dcg.qlookblog.net/20130724.html (hbm)
javascript - document.head.appendChild or document.createElement not working in IE - Stack Overflow: http://stackoverflow.com/questions/10159130
gengou-20140129.js: http://jrf.cocolog-nifty.com/archive/javascript/gengou-20140129.js
gengou-20140208.js: http://jrf.cocolog-nifty.com/archive/javascript/gengou-20140208.js
gengou-20140211.js: http://jrf.cocolog-nifty.com/archive/javascript/gengou-20140211.js
gengou-20190221.js: http://jrf.cocolog-nifty.com/archive/javascript/gengou-20190221.js