Webページの著作権表示の年の自動更新

 Appleの初売りが復活し2017/1/2に開始されるというので、1/1深夜に待ち構えていました。1/2に近づくにつれて恒例のAppleのWebサイト更新前に表示されるsorryページ的な内容に切り替わりました。普段は特に気にすることも無いのですが、ページ内コンテンツが少ないこともあって、何気なくページ下部の著作権表示が目に入りました。
f:id:kachine:20170102231106g:plain

 そして上記スクリーンショット(GIF)に赤枠で印をつけたように、元旦当日にご丁寧にも著作権表示が2017年に変わっていることに気付いたのでした。

Copyright © 2017 Apple Inc. All rights reserved

Appleの初売り - Apple(日本)

 初売りのページだから、新年感を演出するために2017表記で作ったのかなと思いソースを検索してみたものの、どこにも"2017"という文字列はありません。BASE64エンコードでもされてるのかとも思いましたがそうではなく、ソースを軽く眺めてみると、ページ表示時に動的に現在の年号に置換されるようjavascriptが組まれていました。

 (OSSでもないソースコードを引用するのもどうかと思いましたので、現物は引用しません。Appleの実装が気になる方はAppleのサイトを直接ご確認いただくのがよいかと思います。)

 処理内容を理解した上で同等の実装をするならば、以下のような感じになるでしょう(Chromeでのみ動作確認済)。

<div class="footer">
    <!-- 動的に置換したい年表示個所にプレースホルダ的な適当な文字列を記し、当該箇所にidを割り当てておく -->
    <p>Copyright &copy; <span id="idDynamicYear">YEAR</span> Author name</br>All rights reserved.</p>
</div>

<script type="text/javascript">
    <!-- 割り当てたidのテキストを、現在年で書き換える -->
    document.getElementById("idDynamicYear").innerText = ( new Date().getFullYear() ).toString();
</script>

 

そもそも著作権表示の年を更新する必要があるのか?

 Wikipediaによれば「最初のバージョンの最初の発行年を表示」ということですので、更新する必要は無さそうです。それならjavascriptなんて使わずにリテラルでベタ書きしてればいいだけですね。Appleェ…。

最初の発行の年
複数のバージョンがある著作物は最初のバージョンの最初の発行年を表示する。例えば、1990年に最初のバージョンを発行し、2000年に改定したバージョンにつける著作権表示では「1990」となる。これ以外を表示してはいけないということはないので「1990-2000」は問題ないが、「2000」だけでは間違いである。

著作権表示 - Wikipedia

 最初の発行年に加えて最新バージョンの年を表示することは問題ないとのことですので、その場合も更新時に単純にソースにべた書きすればいいと思います。
 実際の更新有無はどうでもよくて、(このページはきちんとメンテされてるんだぞ感を出すために、)常に現在年まで表示したいという要件であれば以下のような実装になるでしょう。

<div class="footer">
    <!-- 年表示個所に最初の発行年を記述し、当該箇所にidを割り当てておく -->
    <p>Copyright &copy; <span id="idDynamicYear">2016</span> Author name</br>All rights reserved.</p>
</div>

<script type="text/javascript">
    var currentYear = ( new Date().getFullYear() ).toString();

    <!-- 最初の発行年と現在年が異なる場合、現在年まで併記した文字列で書き換える -->
    if( document.getElementById("idDynamicYear").innerText != currentYear ){
        document.getElementById("idDynamicYear").innerText = document.getElementById("idDynamicYear").innerText + "-" + currentYear;
    }
</script>

 



以上。