在网站上打印当年的最短途径

时间:2010-12-30 12:29:05

标签: javascript html date

我需要更新几百个在页脚中具有硬编码版权日期的静态HTML页面。我想用一些每年会自动更新的JavaScript替换它。

目前我正在使用:

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

这是否足够短?

15 个答案:

答案 0 :(得分:469)

这是我能得到的最短时间:

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

这适用于我遇到的所有浏览器。

我是如何到达那里的:

  • 您可以直接在新创建的getFullYear上调用Date,无需变量。 new Date().getFullYear()可能看起来有点奇怪,但它很可靠:首先完成new Date()部分,然后执行.getFullYear()
  • 您可以删除type,因为JavaScript是默认设置;这甚至被记录为HTML5 specification的一部分,在这种情况下可能正在编写已经做过的浏览器。
  • 你可以在最后删除分号以获得一个额外保存的字符,因为JavaScript具有“自动分号插入”,这是我通常鄙视并禁止使用的功能,但在此特定用例中它应该是足够安全。

请务必注意,这仅适用于启用了JavaScript的浏览器。理想情况下,这可以更好地作为离线批处理作业(* nix上的sed脚本等)每年处理一次,但如果您想要JavaScript解决方案,我认为这样做的时间很短。 (现在我走了,试探命运。)

答案 1 :(得分:25)

TJ的答案非常好,但我遇到了一个场景,我的HTML已经呈现,而document.write脚本只会覆盖日期年份的所有页面内容。

对于此方案,您可以使用以下代码将文本节点附加到现有元素:

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

答案 2 :(得分:11)

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

答案 3 :(得分:11)

如果您希望将来包含一个时间范围,将当前年份(例如2017年)作为开始年份,那么明年它将如下所示:“©2017-2018,Company。”,然后使用以下代码。它会每年自动更新:

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

©2017-2018,公司版权所有。

但是如果第一年已经过去了,那么最短的代码可以写成:

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

答案 4 :(得分:8)

JS解决方案效果很好,但我会建议服务器端解决方案。我检查的一些网站将整个页面的这个问题变成空白,只是偶尔会看到一年。

原因是 document.write 实际写了整个文档。

我让我的朋友实施了服务器端解决方案,这对他有用。 php中的简单代码

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

享受!

答案 5 :(得分:7)

这是最终最短的最负责任的版本,甚至适用于AD和BC。

[鼓卷......]

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

就是这样。比接受的答案短6个字节。

如果你需要兼容ES5,你可以选择:

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

答案 6 :(得分:2)

根据Chrome审核

对于连接速度慢的用户,动态注入外部脚本 通过document.write()可以将页面加载延迟数十秒。

https://web.dev/no-document-write/?utm_source=lighthouse&utm_medium=devtools

所以没有错误的解决方案是:

(new Date).getFullYear();

答案 7 :(得分:1)

这是我能想到的最佳解决方案,它将与纯JavaScript一起使用。您还可以对元素进行样式设置,因为它可以在CSS中定位。只需添加年份,它将自动更新。

//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();
}
})();
});

答案 8 :(得分:1)

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

答案 9 :(得分:1)

对于React.js,以下是在页脚中对我有用的...

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

答案 10 :(得分:1)

以上专家提供了许多解决此问题的方法。可以使用下面的解决方案,该方法将not blockrenderingnot even re-trigger的页面。

使用纯Javascript:

window.addEventListener('load', (
    function () {
        document.getElementById('copyright-year').appendChild(
            document.createTextNode(
                new Date().getFullYear()
            )
        );
    }
));
<div> &copy; <span id="copyright-year"></span></div>

在jQuery中:

$(document).ready(function() {
  document.getElementById('copyright-year').appendChild(
    document.createTextNode(
      new Date().getFullYear()
    )
  );
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div> &copy; <span id="copyright-year"></span></div>

答案 11 :(得分:1)

接受的答案并不总是有效

最近的更新导致我所有的WordPress页脚版权日期都被下推到页面末尾,而不是像以前那样以内联方式编写。我确信在其他情况下也可能会发生这种情况,但这只是我注意到的地方。

enter image description here

如果发生这种情况,您可以通过创建一个空的span标签并像这样注入日期来解决它:

<span id="cdate"></span><script>document.getElementById("cdate").innerHTML = (new Date().getFullYear());</script> 

或者如果您在网站上启用了jquery,则可以这样简单一些:

<span id="cdate"></span><script>$("#cdate").html(new Date().getFullYear());</script> 

这与Adam Milecki的答案类似,但更短

答案 12 :(得分:1)

使用 document.write 不是一个好习惯。您可以通过按 here 了解有关 document.write 的更多信息。除非万不得已,否则不要使用 document.write。这是一个有点友好的 javascript/html 解决方案。是的,有一些关于 InnerHTML 是如何糟糕的研究,正在研究一个更友好的灵魂。

document.getElementById("year").innerHTML=(new Date).getFullYear();

↑ javascript

↓ html

<span id="year"></span>

您可以将 javascript 代码放在 html 中,但最好放在 javascript 文件中。很干净的回答。就个人而言,我建议使用 PHP 编写当前年份。可能是最安全的答案。

如果你想用 PHP 编写当前年份,你可以用这个小代码来实现。

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

请记住,为了应用此 PHP 代码,您的网页文件必须是 PHP。

答案 13 :(得分:0)

如果您在网站上多次需要当前年份,您可以这样做:

document.querySelectorAll("copy-year").forEach(el => {
    el.textContent = `${el.textContent} - ${new Date().getFullYear()}`;
});
Copyright Company <copy-year>1234</copy-year> ©

我知道,这不是最短的方法,但效果很好。

PS:您需要在页面底部使用 JS 或在 script 标签上使用 defer 属性。

答案 14 :(得分:0)

全年:

document.getElementById("getyear").innerHTML = (new Date().getFullYear());
<span id="getyear"></span>