Kürzester Weg, um das aktuelle Jahr auf einer Website zu drucken

232

Ich muss einige hundert statische HTML-Seiten aktualisieren, deren Copyright-Datum in der Fußzeile fest codiert ist. Ich möchte es durch JavaScript ersetzen, das jedes Jahr automatisch aktualisiert wird.

Derzeit verwende ich:

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

Ist das so kurz wie es nur geht?

tpow
quelle

Antworten:

542

Hier ist das kürzeste, was ich bekommen kann:

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

Das funktioniert in allen Browsern, auf die ich gestoßen bin.

Wie ich dorthin gekommen bin:

  • Sie können einfach getFullYeardie neu erstellte DateVariable aufrufen , ohne dass eine Variable erforderlich ist. new Date().getFullYear()mag etwas seltsam aussehen, ist aber zuverlässig: Der new Date()Teil wird zuerst erledigt, dann der .getFullYear().
  • Sie können das löschen type, da JavaScript die Standardeinstellung ist. Dies ist sogar als Teil der HTML5-Spezifikation dokumentiert , die in diesem Fall wahrscheinlich aufschreibt, was Browser bereits tun.
  • Sie können das Semikolon am Ende für ein zusätzliches gespeichertes Zeichen löschen, da JavaScript über eine "automatische Semikoloneinfügung" verfügt, eine Funktion, die ich normalerweise verachte und gegen die ich mich schimpfe. In diesem speziellen Anwendungsfall sollte sie jedoch sicher genug sein.

Es ist wichtig zu beachten, dass dies nur in Browsern funktioniert, in denen JavaScript aktiviert ist. Im Idealfall wird dies besser als Offline-Batch-Job ( sedSkript auf * nix usw.) einmal im Jahr behandelt. Wenn Sie jedoch die JavaScript-Lösung möchten, ist diese meiner Meinung nach so kurz wie möglich. (Jetzt bin ich gegangen und habe das Schicksal versucht.)

TJ Crowder
quelle
1
2019 werden alle Seiteninhalte neu geschrieben. vermisse ich etwas
Systems Rebooter
2
@SystemsRebooter - Sie können nur document.writefür Inline-Inhalte während der anfänglichen Analysephase verwenden (wie oben gezeigt, in einem <script>...</script>Tag - oder in einer .jsDatei, die mit einem scriptTag ohne defer oder geladen wurde async). Wenn die Seite vollständig analysiert wurde, wird der Dokumentstrom geschlossen und erneut document.writegeöffnet. Dadurch wird das Dokument vollständig durch ein neues ersetzt. Wenn Sie ein Jahr nach Abschluss der Hauptanalyse hinzufügen möchten, möchten Sie das DOM verwenden. (Dies ist keine Änderung, es war schon immer so.)
TJ Crowder
44

Die Antwort von TJ ist ausgezeichnet, aber ich bin auf ein Szenario gestoßen, in dem mein HTML bereits gerendert wurde und das Skript document.write den gesamten Seiteninhalt mit nur dem Datumsjahr überschrieb.

In diesem Szenario können Sie einen Textknoten mit dem folgenden Code an das vorhandene Element anhängen:

<div>
    &copy;
    <span id="copyright">
        <script>document.getElementById('copyright').appendChild(document.createTextNode(new Date().getFullYear()))</script>
    </span>
    Company Name
</div>
Adam Milecki
quelle
Ja - eine gute Lösung! Ich empfehle, das Skript-Snippet direkt vor dem schließenden Body-Tag oder in Ihr anderes js am Ende des HTML-Body zu verschieben.
Christian Michael
createTextNode()interpretiert HTML nicht so, <br>wie man einen Knoten mit HTML erstellt?
rubo77
19

Wenn Sie in Zukunft einen Zeitrahmen mit dem aktuellen Jahr (z. B. 2017) als Startjahr angeben möchten, damit es im nächsten Jahr folgendermaßen aussieht: „© 2017-2018, Company.“, Verwenden Sie den folgenden Code . Es wird jedes Jahr automatisch aktualisiert:

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

© Copyright 2017-2018, Firma.

Wenn das erste Jahr bereits vergangen ist, kann der kürzeste Code folgendermaßen geschrieben werden:

&copy; Copyright 2010-<script>document.write(new Date().getFullYear())</script>, Company.
Martin Adams
quelle
13
<script type="text/javascript">document.write(new Date().getFullYear());</script>
Thomas Kremmel
quelle
1
Ich weiß, dass nur <script> kürzer ist (siehe andere Antwort), aber seine ist aktueller und wird immer funktionieren. Tatsächlich hatte ich eine Instanz in WP, in der die andere nicht funktionierte, aber diese war kein Problem. Ich bin mir nicht sicher, warum WP ein Problem damit aufwerfen würde ... Ich weiß, dass man heutzutage das fallen lassen kann; am Ende und das Skript standardmäßig auf js sowieso, aber immer noch.
Malachi
9

Die JS-Lösung funktioniert hervorragend, aber ich würde eine serverseitige Lösung empfehlen. Bei einigen der von mir überprüften Websites wurde die gesamte Seite leer und nur das Jahr wurde ab und zu angezeigt.

Der Grund dafür war das document.write, das tatsächlich über das gesamte Dokument geschrieben wurde.

Ich habe meinen Freund gebeten, eine serverseitige Lösung zu implementieren, die für ihn funktioniert hat. Der einfache Code in PHP

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

Genießen!

Arcanyx
quelle
1
Ihre Lösung ist so einfach, aber die Sache ist, dass die Frage mit JavaScript zusammenhängt
Mo.
2
Haha! Die Lösung wurde bereits gegeben, als ich dies veröffentlichte. Trotzdem wollte ich, dass die Leute wissen, dass es auch andere Möglichkeiten gibt! Hoffe es hilft jemandem wie mir in der Zukunft!
Arcanyx
Ich stimme Ihnen zu, dass wir nach Alternativen suchen müssen, wenn es keine Lösung mit demselben Denken gibt. Seien Sie vorsichtig bei Abstimmungen 😉
Mo.
Und was ist, wenn die serverseitige Lösung Node.js und damit JavaScript ist?
Rorymorris89
2
Wenn die Seite leer ist, bedeutet dies, dass sie verwendet document.writewurde, nachdem das DOM bereits geladen wurde. Die Lösung besteht darin, nicht document.writenach allen DOM-Ladevorgängen zu verwenden oder, noch besser, überhaupt nicht zu verwenden document.write.
user4642212
8

Hier ist die kürzeste und verantwortungsvollste Version, die sowohl für AD als auch für BC funktioniert.

[Trommelwirbel ...]

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

Das ist es. 6 Bytes kürzer als die akzeptierte Antwort.

Wenn Sie ES5-kompatibel sein müssen, können Sie sich mit Folgendem zufrieden geben:

<script>document.write(Date().split(' ')[3])</script>
Christiaan Westerbeek
quelle
4
Was ist, wenn Ihr Benutzer in der Zeit vor 1000 n. Chr. Zurückgeht? Oder was ist, wenn ein Benutzer Ihre App> 9999 AD verwendet? #responsibleCode # NotAnotherY2K;)
Nick Steele
3
@NickSteele Hoffentlich schreiben wir zu diesem Zeitpunkt noch kein reines Javascript.
Michael McQuade
1

Dies ist die beste Lösung, die ich mir vorstellen kann und die mit reinem JavaScript funktioniert. Sie können das Element auch so gestalten, wie es in CSS verwendet werden kann. Fügen Sie einfach anstelle des Jahres hinzu, und es wird automatisch aktualisiert.

//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();
        }
    })();
});
Chris
quelle
1

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

Jonathan Akwetey Okine
quelle
1

Für React.js hat Folgendes in der Fußzeile für mich funktioniert ...

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