Maneira mais curta de imprimir o ano atual em um site


232

Preciso atualizar algumas centenas de páginas HTML estáticas que têm a data de direitos autorais codificada no rodapé. Quero substituí-lo por algum JavaScript que será atualizado automaticamente a cada ano.

Atualmente estou usando:

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

Isso é o mais curto possível?

Respostas:


542

Aqui está o mais curto possível:

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

Isso funcionará em todos os navegadores que encontrei.

Como cheguei lá:

  • Você pode simplesmente chamar getFullYeardiretamente o recém-criado Date, sem necessidade de uma variável. new Date().getFullYear()pode parecer um pouco estranho, mas é confiável: a new Date()peça é feita primeiro e depois a .getFullYear().
  • Você pode soltar o type, porque JavaScript é o padrão; isso é documentado como parte da especificação HTML5 , que provavelmente neste caso está escrevendo o que os navegadores já fazem.
  • Você pode soltar o ponto e vírgula no final para um caractere salvo extra, porque o JavaScript possui "inserção automática de ponto e vírgula", um recurso que normalmente desprezo e critico, mas nesse caso de uso específico, ele deve ser suficientemente seguro.

É importante observar que isso funciona apenas em navegadores onde o JavaScript está ativado. Idealmente, isso seria melhor tratado como um trabalho em lote offline ( sedscript em * nix, etc.) uma vez por ano, mas se você quiser a solução JavaScript, acho que é o mais curto possível. (Agora eu fui e tentei o destino.)


1
em 2019, reescreve todo o conteúdo da página. estou esquecendo de algo?
— Systems Rebooter

2
@SystemsRebooter - Você só pode usar document.writepara conteúdo embutido durante a fase de análise inicial (como mostrado acima, em uma <script>...</script>tag - ou em um .jsarquivo carregado com uma scripttag sem defer ou async). Quando a página é totalmente analisada, o fluxo de documentos é fechado e o uso é document.writereaberto - substituindo completamente o documento por um novo. Se você deseja adicionar um ano após a conclusão da análise principal, use o DOM. (Isto não é uma mudança, que sempre foi assim.)
— TJ Crowder

44

A resposta de TJ é excelente, mas encontrei um cenário em que meu HTML já estava renderizado e o script document.write sobrescreveria todo o conteúdo da página apenas com a data do ano.

Nesse cenário, você pode anexar um nó de texto ao elemento existente usando o seguinte código:

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

Sim - uma boa solução! Eu recomendo mover o snippet de script logo antes da tag body de fechamento ou para seus outros js no final do corpo html.
— Christian Michael

createTextNode()não interpreta html como <br>como criar um nó com HTML?
— rubo77 18/04

19

Se você deseja incluir um período no futuro, com o ano atual (por exemplo, 2017) como o ano inicial, para que no próximo ano apareça assim: “© 2017-2018, Company.”, Use o código a seguir . Ele será atualizado automaticamente a cada ano:

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

© Copyright 2017-2018, Empresa.

Mas se o primeiro ano já passou, o código mais curto pode ser escrito assim:

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

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

1
Eu sei que apenas <script> é mais curto (veja outra resposta), mas o dele é mais atual e sempre funcionará. Na verdade, eu tive um exemplo no WP em que o outro não funcionaria, mas este não foi um problema. Não sei por que o WP lançaria um problema sobre isso ... Eu sei que hoje em dia você pode soltar o; no final e o script padrão para js de qualquer maneira, mas ainda assim.
— Malaquias

9

A solução JS funciona muito bem, mas eu recomendaria uma solução do lado do servidor. Alguns dos sites que eu verifiquei tiveram esse problema da página inteira ficando em branco e apenas o ano sendo visto de vez em quando.

A razão para isso foi a document.write realmente escreveu sobre o documento inteiro.

Pedi ao meu amigo para implementar uma solução no servidor e funcionou para ele. O código simples em php

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

Aproveitar!


1
Sua solução é tão simples, mas a coisa é que a questão está relacionada com JavaScript
— Mo.

2
Haha! A solução já foi dada quando publiquei isso. Ainda assim, eu queria que as pessoas soubessem que existem outras maneiras também! Espero que ajude alguém como eu no futuro!
— Arcanyx

Concordo com você que precisamos procurar alternativas quando não há solução com o mesmo pensamento. Tenha cuidado com o voto negativo
— Mo

E se a solução do servidor for Node.js e, portanto, JavaScript?
— Rorymorris89

2
Se a página ficar em branco, isso significa que document.writefoi usado após o DOM já estar carregado. A solução é não usar document.writedepois que todo o DOM for carregado ou, melhor ainda, não usar document.write.
— user4642212

8

Aqui está a versão mais curta e mais responsável que funciona até no AD e no BC.

[tambor rola ...]

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

É isso aí. 6 bytes mais curtos que a resposta aceita.

Se você precisar ser compatível com ES5, poderá optar por:

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

4
E se o usuário voltar no tempo antes de 1000 dC? Ou se um usuário estiver usando seu aplicativo> 9999 AD? #responsibleCode # NotAnotherY2K;)
— Nick Steele

3
@NickSteele Espero que não estejamos escrevendo javascript puro nesse momento.
— Michael McQuade

1

Esta é a melhor solução que posso pensar que funcionará com JavaScript puro. Você também poderá estilizar o elemento, pois ele pode ser direcionado em CSS. Basta adicionar no lugar do ano e ele será atualizado automaticamente.

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

Para o React.js, o seguinte funcionou para mim no rodapé ...

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.