Des années plus tard, en faisant autre chose, j'ai été rappelé que Date()
(sans new
) renvoie une chaîne, et une manière qui est un caractère plus courte que mon original ci-dessous est venue à moi:
document.write(/\d{4}/.exec(Date())[0])
La première séquence de quatre chiffres dans la chaîne de Date()
est spécifié comme étant l'année. (Ce comportement n'était pas spécifié - bien que courant - lorsque ma réponse originale ci-dessous a été postée.)
Bien sûr, cette solution n'est valable que pour encore 7 979 ans (en 2021), car à partir de l'année 10000, elle affichera "1000" au lieu de "10000".
Vous avez demandé une solution JavaScript, voici la forme la plus courte que j'ai pu obtenir:
document.write(new Date().getFullYear())
Cela fonctionnera dans tous les navigateurs que j'ai utilisés.
Comment j'en suis arrivé là:
- Vous pouvez simplement appeler
getFullYear
directement sur le nouveau Date
créé, pas besoin d'une variable. new Date().getFullYear()
peut sembler un peu bizarre, mais c'est fiable: la partie new Date()
est effectuée en premier, puis le .getFullYear()
.
- Vous pouvez supprimer le
type
, car JavaScript est le langage par défaut; cela est même documenté dans la specification HTML5, qui décrit probablement ce que les navigateurs font déjà dans ce cas.
- Vous pouvez omettre le point-virgule à la fin pour un caractère supplémentaire sauver, car JavaScript a "l'insertion automatique de point-virgule," une fonctionnalité que je déteste normalement et contre laquelle je proteste, mais dans ce cas spécifique, il devrait être assez 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 une tâche en batch hors ligne (script sed
sur *nix, etc.) une fois par an, mais si vous préférez la solution JavaScript, je pense que c'est aussi court que possible. (Maintenant, j'ai tenté le destin.)
Cependant, sauf si vous utilisez un serveur qui peut uniquement fournir des fichiers statiques, vous feriez probablement mieux de le faire sur le serveur avec un moteur de template et en utilisant des en-têtes de mise en cache pour permettre à la page résultante d'être mise en cache jusqu'à ce que la date n'ait besoin de changer. De cette façon, vous n'avez pas besoin de JavaScript côté client. Utiliser une balise script
non-defer
/async
dans le contenu retarde également brièvement l'analyse et la présentation de la page (pour exactement cette raison: car le code dans le script pourrait utiliser document.write
pour afficher du HTML).