Kortste manier om het huidige jaar op een website af te drukken

Ik moet een paar honderd statische HTML-pagina’s bijwerken met de copyrightdatum hard gecodeerd in de voettekst. Ik wil het vervangen door JavaScript dat elk jaar automatisch wordt bijgewerkt.

Momenteel gebruik ik:

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

Is dit zo kort als maar kan?


Antwoord 1, autoriteit 100%

Je hebt om een JavaScript-oplossing gevraagd, dus hier is de kortste die ik kan krijgen:

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

Dat werkt in alle browsers die ik ben tegengekomen.

Hoe ik daar kwam:

  • Je kunt getFullYeargewoon rechtstreeks bellen op de nieuw aangemaakte Date, geen variabele nodig. new Date().getFullYear()ziet er misschien een beetje vreemd uit, maar het is betrouwbaar: het gedeelte new Date()wordt eerst gedaan, daarna het .getFullYear().
  • Je kunt het typelaten vallen, omdat JavaScript de standaard is; dit is zelfs gedocumenteerd als onderdeel van de HTML5-specificatie, die in dit geval waarschijnlijk opschrijven wat browsers al doen.
  • Je kunt de puntkomma aan het einde laten vallen voor een extra opgeslagen teken, omdat JavaScript “automatische puntkomma-invoeging” heeft, een functie die ik normaal verachten tegen, maar in dit specifieke geval zou het moeten wees veilig genoeg.

Het is belangrijk op te merken dat dit alleen werkt in browsers waarin JavaScript is ingeschakeld. In het ideale geval zou dit één keer per jaar beter kunnen worden afgehandeld als een offline batchtaak (sed-script op *nix, enz.), maar als je de JavaScript-oplossing wilt, denk ik dat dat zo kort mogelijk is. (Nu ben ik gegaan en tartte het lot.)


Echter, tenzij u een server gebruikt die alleenstatische bestanden kan leveren, kunt u dit waarschijnlijk beter op de server doen met een template-engine en caching-headers om de resulterende pagina in de cache te kunnen plaatsen totdat de datum moet worden gewijzigd. Op die manier heeft u geen JavaScript nodig op de client. Het gebruik van een niet-defer/asyncscript-tag in de inhoud vertraagt ook kort het parseren en presenteren van de pagina (om precies deze reden: omdat de code in het script kan document.writegebruiken om HTML uit te voeren).


Antwoord 2, autoriteit 8%

TJ’s antwoord is uitstekend, maar ik kwam een scenario tegen waarin mijn HTML al werd weergegeven en het document.write-script alle pagina-inhoud zou overschrijven met alleen de datum jaar.

Voor dit scenario kunt u een tekstknooppunt toevoegen aan het bestaande element met behulp van de volgende code:

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

Antwoord 3, autoriteit 4%

Als u een tijdsbestek in de toekomst wilt opnemen, met het huidige jaar (bijv. 2017) als startjaar zodat het er volgend jaar als volgt uitziet: “© 2017-2018, Bedrijf.”, gebruik dan de volgende code. Het wordt elk jaar automatisch bijgewerkt:

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

© Copyright 2017-2018, Company.

Maar als het eerste jaar al is gepasseerd, kan de kortste code zo worden geschreven:

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

Antwoord 4, Autoriteit 3%

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

Antwoord 5, Autoriteit 2%

De JS-oplossing werkt geweldig, maar ik zou adviseren over een serverzijdige oplossing. Sommige van de sites die ik heb gecontroleerd, had deze kwestie van de hele pagina leeg en slechts het jaar dat af en toe wordt gezien.

De reden hiervoor was het -Document.Write heeft daadwerkelijk over het hele document geschreven.

Ik vroeg mijn vriend om een ​​Server Side-oplossing te implementeren en het werkte voor hem.
De eenvoudige code in PHP

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

Geniet!


Antwoord 6

Hier is de ultieme kortste meest verantwoorde versie die zowel AD als BC zelfs werkt.

[Trommelrollen …]

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

Dat is het. 6 bytes korter dan het geaccepteerde antwoord.

Als u ES5-compatibel moet zijn, kunt u genoegen nemen met:

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

Antwoord 7

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

Antwoord 8

Voor react.js, het volgende is wat voor mij in de voettekst werkte …

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

Antwoord 9

Dit is de beste oplossing die ik kan bedenken dat zal werken met Pure JavaScript. Je zult ook in staat zijn om het element te stylen omdat het kan worden gericht in CSS. Voeg gewoon toe in plaats van het jaar en wordt automatisch bijgewerkt.

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

Antwoord 10

Volgens Chrome Audit

Voor gebruikers op langzame verbindingen, externe scripts dynamisch geïnjecteerd
Via document.write()kan paginabelasting door tien seconden uitstellen.

https://web.dev/no-document- write/?utm_source=lighthouse&utm_medium=devtools

dus de oplossing zonder fouten is:

(new Date).getFullYear();

Antwoord 11

Er zijn veel oplossingen voor dit probleem, zoals hierboven beschreven door experts. Onderstaande oplossing kan worden gebruikt die not blockde pagina renderingof not even re-trigger.

In puur Javascript:

window.addEventListener('load', (
    function () {
        document.getElementById('copyright-year').appendChild(
            document.createTextNode(
                new Date().getFullYear()
            )
        );
    }
));
<div> &copy; <span id="copyright-year"></span></div>

Antwoord 12

Het geaccepteerde antwoord werkt niet altijd

Een recente update heeft ervoor gezorgd dat al mijn copyrightdatums in de voettekst van WordPress naar het einde van de pagina zijn geduwd in plaats van het inline te schrijven zoals vroeger. Ik weet zeker dat er andere gevallen zijn waarin dit ook kan gebeuren, maar dit is precies waar ik het heb opgemerkt.

Als dit gebeurt, kun je dit oplossen door een lege span-tag te maken en je date er als volgt in te injecteren:

<span id="cdate"></span><script>document.getElementById("cdate").innerHTML = (new Date().getFullYear());</script> 

of als u jQuery op uw site heeft ingeschakeld, kunt u het als volgt eenvoudiger doen:

<span id="cdate"></span><script>$("#cdate").html(new Date().getFullYear());</script> 

Dit is vergelijkbaar met het antwoord van Adam Milecki, maar veel korter


Antwoord 13

Het is geen goede gewoonte om document.writete gebruiken. U kunt meer te weten komen over document.write door hierte drukken. Gebruik document.write niet, tenzij het moet. Hier is een enigszins vriendelijke javascript/html-oplossing. En ja, er zijn studies over hoe InnerHTML slecht is, werkend aan een vriendelijkere ziel.

document.getElementById("year").innerHTML=(new Date).getFullYear();

↑ javascript

↓ html

<span id="year"></span>

U kunt de javascript-code in uw html plaatsen, maar deze ziet er het beste uit in een javascript-bestand. Heel duidelijk antwoord. Persoonlijk raad ik aan om het lopende jaar met PHP te schrijven. Waarschijnlijk het veiligste antwoord.

Als je het huidige jaar met PHP wilt schrijven, dan kan dat met deze kleine code.

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

Vergeet niet dat om deze PHP-code toe te passen, uw webpaginabestand PHP moet zijn.


Antwoord 14

Als u het huidige jaartal meerdere keren op uw site nodig heeft, kunt u dit doen:

document.querySelectorAll("copy-year").forEach(el => {
    el.textContent = `${el.textContent} - ${new Date().getFullYear()}`;
});
Copyright Company <copy-year>1234</copy-year> ©

Antwoord 15

Vol jaar:

document.getElementById("getyear").innerHTML = (new Date().getFullYear());
<span id="getyear"></span>

Other episodes