Il modo più breve per stampare l'anno corrente in un sito Web


232

Devo aggiornare alcune centinaia di pagine HTML statiche che hanno la data di copyright codificata nel piè di pagina. Voglio sostituirlo con alcuni JavaScript che si aggiorneranno automaticamente ogni anno.

Attualmente sto usando:

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

È così corto?

Risposte:


542

Ecco il più breve che posso ottenerlo:

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

Funzionerà in tutti i browser che ho incontrato.

Come ci sono arrivato:

  • Puoi semplicemente chiamare getFullYeardirettamente sul nuovo creato Date, senza bisogno di una variabile. new Date().getFullYear()può sembrare un po 'strano, ma è affidabile: la new Date()parte viene eseguita prima, poi il .getFullYear().
  • È possibile eliminare il type, perché JavaScript è l'impostazione predefinita; questo è persino documentato come parte della specifica HTML5 , che probabilmente in questo caso sta scrivendo ciò che i browser già fanno.
  • È possibile eliminare il punto e virgola alla fine per un carattere in più salvato, poiché JavaScript ha "inserimento automatico del punto e virgola", una caratteristica che normalmente disprezzo e mi rendo conto , ma in questo caso d'uso specifico dovrebbe essere abbastanza sicuro.

È importante notare che questo funziona solo sui browser in cui JavaScript è abilitato. Idealmente, questo sarebbe meglio gestito come un processo batch offline ( sedscript su * nix, ecc.) Una volta all'anno, ma se si desidera la soluzione JavaScript, penso che sia il più breve possibile. (Ora sono andato e ho tentato il destino.)


1
nel 2019 riscrive tutto il contenuto della pagina. mi sto perdendo qualcosa?
Rebooter dei sistemi

2
@SystemsRebooter: è possibile utilizzare solo i document.writecontenuti incorporati durante la fase di analisi iniziale (come mostrato sopra, in un <script>...</script>tag) o in un .jsfile caricato con un scripttag senza defer o async). Quando la pagina viene analizzata completamente, il flusso di documenti viene chiuso e l'utilizzo lo document.writeriapre, sostituendo completamente il documento con uno nuovo. Se si desidera aggiungere un anno dopo il completamento dell'analisi principale, si desidera utilizzare il DOM. (Questo non è un cambiamento, è sempre stato così.)
TJ Crowder

44

La risposta di TJ è eccellente, ma mi sono imbattuto in uno scenario in cui il mio HTML era già reso e lo script document.write sovrascriveva tutto il contenuto della pagina con solo l'anno della data.

Per questo scenario, puoi aggiungere un nodo di testo all'elemento esistente usando il seguente codice:

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

Sì, una buona soluzione! Consiglio di spostare lo snippet di script subito prima del tag body di chiusura o su altri js alla fine del corpo html.
Christian Michael,

createTextNode()non interpreta HTML come <br>come si crea un nodo con HTML?
rubo77,

19

Se desideri includere un intervallo di tempo in futuro, con l'anno in corso (ad es. 2017) come l'anno di inizio, in modo che l'anno prossimo appaia così: “© 2017-2018, Azienda.”, Quindi utilizza il seguente codice . Si aggiornerà automaticamente ogni anno:

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

© Copyright 2017-2018, Azienda.

Ma se il primo anno è già passato, il codice più breve può essere scritto in questo modo:

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

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

1
So solo che <script> è più breve (vedi altra risposta), ma il suo è più attuale e funzionerà sempre. In effetti, ho avuto un'istanza in WP in cui l'altra non avrebbe funzionato, ma questa non è stata un problema. Non sono sicuro del motivo per cui WP avrebbe sollevato un problema su questo ... So che al giorno d'oggi puoi eliminare; alla fine e lo script predefinito js comunque, ma comunque.
Malachi,

9

La soluzione JS funziona alla grande, ma consiglierei una soluzione lato server. Alcuni dei siti che ho controllato hanno riportato il problema di un'intera pagina vuota e di tanto in tanto è stato visto solo l'anno.

La ragione di ciò era il document.write effettivamente scritto su tutto il documento.

Ho chiesto al mio amico di implementare una soluzione lato server e ha funzionato per lui. Il semplice codice in php

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

Godere!


1
La tua soluzione è così semplice, ma il fatto è che la domanda è collegata a JavaScript
Mo

2
Haha! La soluzione è stata già fornita quando l'ho pubblicato. Volevo comunque che la gente sapesse che ci sono anche altri modi! Spero che possa aiutare qualcuno come me in futuro!
Arcanyx,

Sono d'accordo con te sul fatto che dobbiamo apparire alternativi quando non esiste una soluzione con lo stesso pensiero. Fai attenzione al voto contrario
Mo

E se la soluzione lato server fosse Node.js e quindi JavaScript?
rorymorris89,

2
Se la pagina diventa vuota, significa che è document.writestata utilizzata dopo il DOM già caricato. La soluzione è di non utilizzare document.writedopo tutti i carichi DOM o, ancora meglio, di non utilizzare document.writeaffatto.
user4642212

8

Ecco l'ultima versione più breve e responsabile che funziona anche sia AD che BC.

[rullo di tamburi ...]

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

Questo è tutto. 6 byte più brevi della risposta accettata.

Se devi essere compatibile con ES5, puoi accontentarti di:

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

4
Che dire se il tuo utente torna indietro nel tempo prima del 1000 d.C.? O se un utente utilizza la tua app> 9999 d.C.? #responsibleCode # NotAnotherY2K;)
Nick Steele,

3
@NickSteele Speriamo di non scrivere javascript puro a quel punto.
Michael McQuade,

1

Questa è la migliore soluzione che mi viene in mente che funzionerà con JavaScript puro. Sarai anche in grado di modellare l'elemento in quanto può essere scelto come target nei CSS. Basta aggiungere al posto dell'anno e verrà automaticamente aggiornato.

//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

Per React.js, il seguente è ciò che ha funzionato per me nel piè di pagina ...

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.