在网站上打印当前年份的最短方法


232

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

目前,我正在使用:

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

这是那么短吗?

Answers:


542

这是我能得到的最短的:

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

这将适用于我所运行的所有浏览器。

我如何到达那里:

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

重要的是要注意,这仅适用于启用了JavaScript的浏览器。理想情况下,最好将其作为脱机批处理作业(sed* nix上的脚本等)每年处理一次,但是如果您需要JavaScript解决方案,我认为它就这么短。(现在,我走了,去吸引命运。)


1
在2019年它将重写所有页面内容。我错过了什么吗?
Systems Rebooter

2
@SystemsRebooter-您只能document.write在初始解析阶段使用内联内容(如上所示,在<script>...</script>标签中-或在.js加载了script标签的文件中不带 deferasync)。页面完全解析后,文档流将关闭,并使用document.write重新打开它-用新的文档完全替换文档。如果要在主解析完成后再添加一年,则要使用DOM。(这不是更改,一直都是这种方式。)
TJ Crowder

44

TJ的回答很好,但是我遇到了一种情况,其中我的HTML已经呈现,而document.write脚本将只用日期年份覆盖所有页面内容。

对于这种情况,可以使用以下代码将文本节点追加到现有元素:

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

是的-一个很好的解决方案!我建议将脚本片段移到右正文标签之前,或者移到html正文末尾的其他js。
克里斯蒂安·迈克尔

createTextNode()不像<br>您如何使用HTML创建节点那样解释html ?
rubo77

19

如果要在将来包括当前年份(例如2017年)作为开始年份的时间范围,以便明年显示如下:“©2017-2018,Company。”,然后使用以下代码。它将每年自动更新:

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

©版权所有2017-2018,Company。

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

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

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

1
我知道只是<script>较短(请参阅其他答案),但是他的当前版本更多并且将始终有效。实际上,我在WP中有一个实例,其中另一个实例不起作用,但是这个实例没有问题。不知道为什么WP会对此提出问题...我知道现在您可以删除; 最后,脚本仍然默认为js,但仍然如此。
玛拉基

9

JS解决方案效果很好,但我建议使用服务器端解决方案。我检查过的某些网站出现了整个页面空白的问题,只是偶尔会出现一年。

原因是document.write实际上覆盖了整个文档。

我请我的朋友实施服务器端解决方案,它对他有用。PHP中的简单代码

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

请享用!


1
您的解决方案非常简单,但问题是与JavaScript有关
Mo.

2
哈哈!我发布此消息时已经给出了解决方案。我还是希望人们知道还有其他方法!希望以后能对像我这样的人有所帮助!
Arcanyx

我确实同意您的看法,如果没有相同想法的解决方案,我们需要寻找替代方案。要小心向下投票😉
密苏里州

如果服务器端的解决方案是Node.js,然后是JavaScript,该怎么办?
rorymorris89 '02

2
如果页面为空白,则表示document.write已在DOM加载后使用该页面。解决方案是document.write在所有DOM加载后都不使用,或者更好的是根本不使用document.write
user4642212'9

8

这是最短,最负责任的版本,甚至可以在AD和BC上使用。

[鼓卷...]

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

而已。比可接受的答案短6个字节。

如果您需要与ES5兼容,则可以满足以下条件:

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

4
如果您的用户回到了公元1000年之前,该怎么办?或者,如果用户使用您的应用> 9999 AD怎么办?#responsibleCode#NotAnotherY2K;)
尼克·斯蒂尔

3
@NickSteele希望那时我们不会写纯JavaScript。
Michael McQuade

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


1

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.