Manière la plus courte d'imprimer l'année en cours dans un site Web

232

J'ai besoin de mettre à jour quelques centaines de pages HTML statiques dont la date de copyright est codée en dur dans le pied de page. Je veux le remplacer par du JavaScript qui sera mis à jour automatiquement chaque année.

Actuellement j'utilise:

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

Est-ce aussi court que possible?

tpow
la source

Réponses:

542

Voici le plus court possible:

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

Cela fonctionnera dans tous les navigateurs que j'ai rencontrés.

Comment j'y suis arrivé:

  • Vous pouvez simplement appeler getFullYeardirectement sur la nouvelle création Date, pas besoin de variable. new Date().getFullYear()peut sembler un peu étrange, mais c'est fiable: la new Date()pièce est faite en premier, puis.getFullYear() .
  • Vous pouvez supprimer le type, car JavaScript est la valeur par défaut; cela est même documenté dans le cadre de la spécification HTML5 , qui dans ce cas est probablement en train d'écrire ce que les navigateurs font déjà.
  • Vous pouvez supprimer le point-virgule à la fin pour un caractère supplémentaire enregistré, car JavaScript a une "insertion automatique de point-virgule", une fonctionnalité que je méprise et contre laquelle je me moque normalement , mais dans ce cas d'utilisation spécifique, il devrait être suffisamment sûr.

Il est important de noter que cela ne fonctionne que sur les navigateurs où JavaScript est activé. Idéalement, cela serait mieux géré comme un travail par lots hors ligne ( sedscript sur * nix, etc.) une fois par an, mais si vous voulez la solution JavaScript, je pense que c'est aussi court que possible. (Maintenant, je suis allé et tenté le destin.)

TJ Crowder
la source
1
en 2019, il réécrit tout le contenu de la page. est-ce que je manque quelque chose?
Systems Rebooter
2
@SystemsRebooter - Vous ne pouvez utiliser document.writepour le contenu en ligne que pendant la phase d'analyse initiale (comme illustré ci-dessus, dans une <script>...</script>balise - ou dans un .jsfichier chargé avec une scriptbalise sans defer ou async). Lorsque la page est entièrement analysée, le flux de documents est fermé, et l'utilisation le document.writerouvre - en remplaçant complètement le document par un nouveau. Si vous souhaitez ajouter un an après la fin de l'analyse principale, vous souhaitez utiliser le DOM. (Ce n'est pas un changement, ça a toujours été comme ça.)
TJ Crowder
44

La réponse de TJ est excellente mais je suis tombé sur un scénario où mon HTML était déjà rendu et le script document.write écraserait tout le contenu de la page avec seulement l'année de la date.

Pour ce scénario, vous pouvez ajouter un nœud de texte à l'élément existant à l'aide du code suivant:

<div>
    &copy;
    <span id="copyright">
        <script>document.getElementById('copyright').appendChild(document.createTextNode(new Date().getFullYear()))</script>
    </span>
    Company Name
</div>
Adam Milecki
la source
Oui - une bonne solution! Je recommande de déplacer l'extrait de script juste avant la balise de fermeture du corps ou vers vos autres js à la fin du corps html.
Christian Michael
createTextNode()n'interprète pas le HTML comme <br>comment créer un nœud avec HTML?
rubo77
19

Si vous souhaitez inclure un laps de temps à l'avenir, avec l'année en cours (par exemple 2017) comme année de début afin que l'année prochaine, elle apparaisse comme ceci: «© 2017-2018, Company.», Puis utilisez le code suivant . Il sera automatiquement mis à jour chaque année:

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

© Copyright 2017-2018, Société.

Mais si la première année s'est déjà écoulée, le code le plus court peut être écrit comme ceci:

&copy; Copyright 2010-<script>document.write(new Date().getFullYear())</script>, Company.
Martin Adams
la source
13
<script type="text/javascript">document.write(new Date().getFullYear());</script>
Thomas Kremmel
la source
1
Je sais que <script> est plus court (voir autre réponse), mais le sien est plus actuel et fonctionnera toujours. En fait, j'avais une instance dans WP où l'autre ne fonctionnait pas, mais celle-ci n'était pas un problème. Je ne sais pas pourquoi WP poserait un problème à ce sujet ... Je sais que de nos jours, vous pouvez laisser tomber le; à la fin et le script par défaut à js de toute façon, mais quand même.
Malachi
9

La solution JS fonctionne très bien mais je conseillerais une solution côté serveur. Certains des sites que j'ai consultés avaient ce problème de la page entière vide et seulement l'année étant vue de temps en temps.

La raison en est que document.write a en fait écrit sur tout le document.

J'ai demandé à mon ami d'implémenter une solution côté serveur et cela a fonctionné pour lui. Le code simple en php

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

Prendre plaisir!

Arcanyx
la source
1
Votre solution est si simple, mais le fait est que la question est liée à JavaScript
Mo.
2
Haha! La solution était déjà donnée lorsque j'ai posté cela. Je voulais quand même que les gens sachent qu'il y a d'autres façons aussi! J'espère que cela aidera quelqu'un comme moi à l'avenir!
Arcanyx
Je suis d'accord avec vous que nous devons chercher une alternative lorsqu'il n'y a pas de solution avec la même pensée. Faites attention au vote négatif down
Mo.
Et si la solution côté serveur est Node.js et donc JavaScript?
rorymorris89
2
Si la page devient vierge, cela signifie qu'elle a document.writeété utilisée après le DOM déjà chargé. La solution est de ne pas utiliser document.writeaprès tous les chargements DOM, ou, mieux encore, de ne pas utiliser document.writedu tout.
user4642212
8

Voici la version la plus courte et la plus responsable ultime qui fonctionne même à la fois AD et BC.

[rouleaux de tambour ...]

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

C'est tout. 6 octets de moins que la réponse acceptée.

Si vous devez être compatible ES5, vous pouvez vous contenter de:

<script>document.write(Date().split(' ')[3])</script>
Christiaan Westerbeek
la source
4
Qu'en est-il si votre utilisateur remonte dans le temps avant 1000 AD? Ou si un utilisateur utilise votre application> 9999 AD? #responsibleCode # NotAnotherY2K;)
Nick Steele
3
@NickSteele Espérons que nous n'écrivions pas de javascript pur à ce stade.
Michael McQuade
1

C'est la meilleure solution à laquelle je puisse penser qui fonctionnera avec du JavaScript pur. Vous pourrez également styliser l'élément car il peut être ciblé en CSS. Ajoutez simplement à la place de l'année et il sera automatiquement mis à jour.

//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
la source
1

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

Jonathan Akwetey Okine
la source
1

Pour React.js, voici ce qui a fonctionné pour moi dans le pied de page ...

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