Webサイトで現在の年を印刷する最も簡単な方法


232

フッターに著作権の日付がハードコードされている数百の静的HTMLページを更新する必要があります。毎年自動的に更新されるJavaScriptに置き換えたいと思います。

現在私は使用しています:

<script type="text/javascript">var year = new Date();document.write(year.getFullYear());</script>

これは可能な限り短いですか?

回答:


542

ここに私がそれを得ることができる最短のものがあります:

<script>document.write(new Date().getFullYear())</script>

それは私が遭遇したすべてのブラウザで動作します。

私がそこに着いた方法:

  • 変数を必要とせずgetFullYearに、新しく作成したを直接呼び出すだけDateです。new Date().getFullYear()少し奇妙に見えるかもしれませんが、それは信頼できます:new Date()パートが最初に行われ、次に.getFullYear()
  • typeJavaScriptがデフォルトであるため、をドロップできます。これはHTML5仕様の一部としても文書化されており、この場合はブラウザがすでに行っていることを記述している可能性があります。
  • JavaScriptには「セミコロンの自動挿入」という、私が通常軽視している機能ですが、この特定のユースケースでは十分に安全なはずなので、追加の保存文字1つ分のセミコロンを最後にドロップできます。

これは、JavaScriptが有効になっているブラウザーでのみ機能することに注意してください。理想的には、これはsed1年に1回、オフラインバッチジョブ(* nixのスクリプトなど)として処理する方が適切ですが、JavaScriptソリューションが必要な場合は、これで十分だと思います。(今、私は行って、運命を誘惑しました。)


1
2019では、すべてのページコンテンツを書き換えます。私は何かを逃していますか?
システムリブート

2
@SystemsRebooter- document.write最初の解析段階でインラインコンテンツにのみ使用できます(上記のように、<script>...</script>タグ内、またはタグなしで.jsロードされたファイル内で、またはなし)。ページが完全に解析されると、ドキュメントストリームは閉じられ、使用するとページが再度開かれます。つまり、ドキュメントを新しいドキュメントで完全に置き換えます。メインの解析が完了してから1年を追加する場合は、DOMを使用します。(これは変更ではなく、常にこの方法で行われています。)script deferasyncdocument.write
TJクラウダー

44

TJの答えはすばらしいですが、HTMLが既にレンダリングされていて、document.writeスクリプトがすべてのページコンテンツを日付の年だけで上書きするというシナリオに遭遇しました。

このシナリオでは、次のコードを使用して既存の要素にテキストノードを追加できます。

<div>
    &copy;
    <span id="copyright">
        <script>document.getElementById('copyright').appendChild(document.createTextNode(new Date().getFullYear()))</script>
    </span>
    Company Name
</div>

はい-良い解決策です!スクリプトスニペットをbodyの終了タグの直前、またはHTML本文の最後にある他のjsに移動することをお勧めします。
クリスチャンマイケル

createTextNode()<br>HTMLでノードを作成する方法のようにhtmlを解釈しませんか?
rubo77

19

将来の時間枠を含め、現在の年(2017など)を開始年として、来年が「©2017-2018、Company。」のように表示されるようにするには、次のコードを使用します。 。毎年自動的に更新されます:

&copy; Copyright 2017<script>new Date().getFullYear()>2017&&document.write("-"+new Date().getFullYear());</script>, Company.

©Copyright 2017-2018、Company。

しかし、最初の1年がすでに経過している場合、最短のコードは次のように書くことができます。

&copy; Copyright 2010-<script>document.write(new Date().getFullYear())</script>, Company.

13
<script type="text/javascript">document.write(new Date().getFullYear());</script>

1
<script>の方が短いことはわかっていますが(他の回答を参照)、彼はより最新で常に機能します。実際、私はWPで他のインスタンスが機能しない場合がありましたが、これは問題ありませんでした。なぜこれでWPが問題をスローするのかわからない...今日はあなたがドロップできることを知っています。とにかく、スクリプトのデフォルトはjsですが、それでも変わりません。
マラキ2017

9

JSソリューションは適切に機能しますが、サーバー側のソリューションをお勧めします。チェックした一部のサイトでは、このページ全体が空白になり、たまに見られるのは1年だけでした。

この理由は、document.writeが実際にドキュメント全体を上書きしたためです。

私は友人にサーバー側のソリューションを実装するように頼みました、そしてそれは彼のために働きました。PHPの単純なコード

<?php echo date('Y'); ?>

楽しい!


1
あなたのソリューションはとてもシンプルですが、問題はJavaScriptに関連しているということです
Mo.

2
ははは!私がこれを投稿したとき、解決策はすでに与えられていました。それでも私は人々に他の方法があることを知ってほしかった!それが将来私のような人に役立つことを願っています!
Arcanyx 2015年

同じ考え方で解決策がない場合は、別の方法を検討する必要があるということには同意します。😉ダウンの投票は注意してください
ミズーリ州

また、サーバー側のソリューションがNode.js、つまりJavaScriptの場合はどうでしょうか。
rorymorris89

2
ページが空白になる場合、これはdocument.writeDOMが既に読み込まれた後に使用されたことを意味します。解決策はdocument.write、すべてのDOMの読み込み後に使用しないか、さらにはまったく使用document.writeしないことです。
user4642212 2018

8

これは、ADとBCの両方で機能する、最も短い、最も責任のあるバージョンです。

[ドラムロール...]

<script>document.write(Date().split` `[3])</script>

それでおしまい。受け入れられた回答より6バイト短い。

ES5互換である必要がある場合は、次の方法で解決できます。

<script>document.write(Date().split(' ')[3])</script>

4
ユーザーが西暦1000年以前の時間に戻った場合はどうなりますか?または、ユーザーが9999 AD以上のアプリを使用している場合はどうなりますか?#responsibleCode#NotAnotherY2K;)
Nick Steele

3
@NickSteeleうまくいけば、その時点では純粋なjavascriptを作成していません。
Michael McQuade

1

これは、純粋なJavaScriptで機能する、私が考えることができる最良のソリューションです。また、CSSでターゲットに設定できるため、要素のスタイルを設定できます。年の代わりに追加するだけで、自動的に更新されます。

//Wait for everything to load first
window.addEventListener('load', () => {
    //Wrap code in IIFE 
    (function() {
        //If your page has an element with ID of auto-year-update the element will be populated with the current year.
        var date = new Date();
        if (document.querySelector("#auto-year-update") !== null) {
            document.querySelector("#auto-year-update").innerText = date.getFullYear();
        }
    })();
});


1

React.jsの場合、フッターで次のように機能しました...

render() {
    const yearNow = new Date().getFullYear();
    return (
    <div className="copyright">&copy; Company 2015-{yearNow}</div>
);
}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.