La forma más corta de imprimir el año actual en un sitio web

232

Necesito actualizar unos cientos de páginas HTML estáticas que tienen la fecha de copyright codificada en el pie de página. Quiero reemplazarlo con algunos JavaScript que se actualizarán automáticamente cada año.

Actualmente estoy usando:

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

¿Es esto lo más corto posible?

tpow
fuente

Respuestas:

542

Aquí está lo más corto que puedo obtener:

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

Eso funcionará en todos los navegadores que he encontrado.

Cómo llegué allí:

  • Puede llamar getFullYeardirectamente al recién creado Date, sin necesidad de una variable. new Date().getFullYear()puede parecer un poco extraño, pero es confiable: la new Date()parte se realiza primero, luego el .getFullYear().
  • Puede soltar el type, porque JavaScript es el predeterminado; esto incluso se documenta como parte de la especificación HTML5 , que en este caso probablemente escriba lo que los navegadores ya hacen.
  • Puede colocar el punto y coma al final para un carácter guardado adicional, porque JavaScript tiene "inserción automática de punto y coma", una característica que normalmente desprecio y contrarresto, pero en este caso de uso específico debería ser lo suficientemente seguro.

Es importante tener en cuenta que esto solo funciona en navegadores donde JavaScript está habilitado. Idealmente, esto se manejaría mejor como un trabajo por lotes fuera de línea ( sedscript en * nix, etc.) una vez al año, pero si desea la solución de JavaScript, creo que es lo más breve posible. (Ahora me he ido y tentado al destino).

TJ Crowder
fuente
1
en 2019 reescribe todo el contenido de la página. ¿Me estoy perdiendo de algo?
Reiniciador de sistemas el
2
@SystemsRebooter: solo puede usar document.writecontenido en línea durante la fase de análisis inicial (como se muestra arriba, en una <script>...</script>etiqueta, o en un .jsarchivo cargado con una scriptetiqueta sin defer o async). Cuando la página se analiza por completo, la secuencia de documentos se cierra y, al usarla, se document.writevuelve a abrir, reemplazando completamente el documento por uno nuevo. Si desea agregar un año después de que se complete el análisis principal, desea usar el DOM. (Esto no es un cambio, siempre ha sido así.)
TJ Crowder
44

La respuesta de TJ es excelente, pero me encontré con un escenario en el que mi HTML ya estaba renderizado y el script document.write sobrescribiría todo el contenido de la página solo con la fecha del año.

Para este escenario, puede agregar un nodo de texto al elemento existente utilizando el siguiente código:

<div>
    &copy;
    <span id="copyright">
        <script>document.getElementById('copyright').appendChild(document.createTextNode(new Date().getFullYear()))</script>
    </span>
    Company Name
</div>
Adam Milecki
fuente
Sí, ¡una buena solución! Recomiendo mover el fragmento de script justo antes de la etiqueta del cuerpo de cierre o a sus otros js al final del cuerpo html.
Christian Michael
createTextNode()no interpreta html como, <br>¿cómo se crea un nodo con HTML?
rubo77
19

Si desea incluir un marco de tiempo en el futuro, con el año actual (por ejemplo, 2017) como el año de inicio para que el próximo año aparezca así: "© 2017-2018, Compañía", utilice el siguiente código . Se actualizará automáticamente cada año:

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

© Copyright 2017-2018, Empresa.

Pero si ya pasó el primer año, el código más corto puede escribirse así:

&copy; Copyright 2010-<script>document.write(new Date().getFullYear())</script>, Company.
Martin Adams
fuente
13
<script type="text/javascript">document.write(new Date().getFullYear());</script>
Thomas Kremmel
fuente
1
Sé que <script> es más corto (ver otra respuesta), pero el suyo es más actual y siempre funcionará. De hecho, tuve una instancia en WP donde la otra no funcionaría, pero esta no fue un problema. No estoy seguro de por qué WP arrojaría un problema sobre esto ... Sé que hoy en día puedes dejar el; al final y el script por defecto es js de todos modos, pero aún así.
Malaquías
9

La solución JS funciona muy bien, pero recomendaría una solución del lado del servidor. Algunos de los sitios que revisé tenían este problema de la página entera en blanco y solo el año visto de vez en cuando.

La razón de esto fue document.write en realidad escribió sobre todo el documento.

Le pedí a mi amigo que implementara una solución del lado del servidor y funcionó para él. El código simple en php

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

¡Disfrutar!

Arcanyx
fuente
1
Su solución es muy simple, pero la cuestión es que la pregunta está relacionada con JavaScript
Mo.
2
¡Jaja! La solución ya estaba dada cuando publiqué esto. ¡Todavía quería que la gente supiera que hay otras maneras también! ¡Espero que ayude a alguien como yo en el futuro!
Arcanyx
Estoy de acuerdo con usted en que debemos buscar alternativas cuando no hay una solución con el mismo pensamiento. Tenga cuidado con el voto negativo 😉
Mo.
¿Y si la solución del lado del servidor es Node.js y, por lo tanto, JavaScript?
rorymorris89 02 de
2
Si la página se queda en blanco, esto significa que document.writese usó después de que el DOM ya se haya cargado. La solución es no usar document.writedespués de todas las cargas DOM, o, mejor aún, no usar document.writeen absoluto.
user4642212
8

Aquí está la última versión más breve y responsable que incluso funciona tanto AD como BC.

[tambores ...]

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

Eso es. 6 bytes más cortos que la respuesta aceptada.

Si necesita ser compatible con ES5, puede conformarse con:

<script>document.write(Date().split(' ')[3])</script>
Christiaan Westerbeek
fuente
44
¿Qué pasa si su usuario retrocede en el tiempo antes de 1000 AD? ¿O qué pasa si un usuario está usando su aplicación> 9999 AD? #responsibleCode # NotAnotherY2K;)
Nick Steele el
3
@NickSteele Espero que no estemos escribiendo javascript puro en ese momento.
Michael McQuade
1

Esta es la mejor solución que se me ocurre que funcionará con JavaScript puro. También podrá diseñar el elemento, ya que puede orientarse en CSS. Simplemente agregue en lugar del año y se actualizará automáticamente.

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

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

Jonathan Akwetey Okine
fuente
1

Para React.js, lo siguiente es lo que funcionó para mí en el pie de página ...

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