web-dev-qa-db-fra.com

Moyen le plus rapide d'imprimer l'année en cours sur un site Web

Je dois 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 automatiquement mis à jour chaque année.

J'utilise actuellement:

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

Est-ce aussi court que possible?

189
tpow

Voici le plus court je peux l'obtenir:

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

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

Comment je suis arrivé là:

  • Vous pouvez simplement appeler getFullYear directement sur le Date nouvellement créé, sans avoir besoin d'une variable. new Date().getFullYear() peut sembler un peu étrange, mais c'est fiable: la partie new Date() est faite en premier, puis le .getFullYear().
  • Vous pouvez supprimer la type, car JavaScript est la valeur par défaut. cela est même documenté dans le cadre de la spécification HTML5 , qui est probablement dans ce cas en train de rédiger ce que les navigateurs font déjà.
  • Vous pouvez supprimer le point-virgule à la fin pour un caractère supplémentaire, car JavaScript a "l'insertion automatique du point-virgule", une fonctionnalité que je méprise normalement et, 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 sur lesquels JavaScript est activé. Idéalement, cela serait mieux traité comme un travail par lots hors ligne (sed script 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.)

478
T.J. Crowder

La réponse de TJ est excellente, mais j'ai rencontré un scénario dans lequel mon code HTML avait déjà été rendu et le script document.write écrasait tout le contenu de la page avec uniquement 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>
27
Adam Milecki

Si vous souhaitez inclure une période dans le futur, avec l'année en cours (par exemple, 2017) comme année de début, l'année suivante apparaîtra ainsi: “© 2017-2018, Société.”, Utilisez le code suivant . Il se mettra automatiquement à jour chaque année:

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

© Copyright 2017-2018, Company.

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

&copy; Copyright 2010-<script>document.write(new Date().getFullYear())</script>, Company.
13
Martin Adams
<script type="text/javascript">document.write(new Date().getFullYear());</script>
11
Thomas Kremmel

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 numéro de la page entière en blanc et seulement l'année était vue de temps en temps.

La raison en est la document.write a effectivement écrit sur le document entier.

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!

8
Arcanyx

Voici la version la plus courte et la plus responsable ultime qui fonctionne même à la fois pour AD et pour la Colombie-Britannique.

[rouleaux de tambour ...]

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

C'est ça. 6 octets plus court que la réponse acceptée.

Si vous devez être compatible ES5, vous pouvez choisir:

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

C’est la meilleure solution possible qui fonctionne avec du JavaScript pur. Vous pourrez également styler l'élément car il peut être ciblé en CSS. Il suffit d’ajouter à la place de l’année et celle-ci sera automatiquement mise à 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();
}
})();
});
1
Chris