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

tpo*_*pow 202 html javascript date

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

目前我正在使用:

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

这是短暂的吗?

T.J*_*der 496

这是我能得到的最短的:

<script>document.write(new Date().getFullYear())</script>
Run Code Online (Sandbox Code Playgroud)

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

我是怎么到达那里的:

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

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

  • @SystemsRebooter - 您只能在初始解析阶段使用 `document.write` 来处理内联内容(如上所示,在 `&lt;script&gt;...&lt;/script&gt;` 标签中 -- 或在 `.js` 文件中加载了一个 `script` 标签 * 没有 * `defer` 或 `async`)。当页面被完全解析时,文档流被关闭,并使用`document.write`重新打开它——用新的文档完全替换文档。如果要在主解析完成后添加一年,则要使用DOM。(这不是变化,一直都是这样。) (4认同)
  • 在 2019 年,它重写了所有页面内容。我错过了什么吗? (3认同)

Ada*_*cki 29

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

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

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


Mar*_*ams 14

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

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

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

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

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


小智 12

使用 不是一个好的做法document.write。您可以按此处了解有关 document.write 的更多信息。这是一个比较友好的 JavaScript 解决方案。是的,有一些关于 InnerHTML 不好的研究,正在研究更友好的解决方案。

\n
document.getElementById("year").innerHTML = (new Date().getFullYear());\n
Run Code Online (Sandbox Code Playgroud)\n

\xe2\x86\x91 JavaScript

\n

\xe2\x86\x93 HTML

\n
<p>Company &copy; <span id="year"></span> All Rights Reserved.</p>\n
Run Code Online (Sandbox Code Playgroud)\n

这是一个用于测试它的JSFiddle 。就个人而言,我建议使用 PHP 编写当前年份,而不是使用 JavaScript,因为使用 PHP 而不是 JavaScript 更安全。

\n
<?php echo date("Y"); ?>\n
Run Code Online (Sandbox Code Playgroud)\n


Tho*_*mel 11

<script type="text/javascript">document.write(new Date().getFullYear());</script>
Run Code Online (Sandbox Code Playgroud)


Arc*_*nyx 8

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

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

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

<?php echo date('Y'); ?>
Run Code Online (Sandbox Code Playgroud)

请享用!

  • 您的解决方案很简单,但问题是问题与 JavaScript 有关 (2认同)
  • 哈哈!当我发布此内容时,已经给出了解决方案。我仍然希望人们知道还有其他方法!希望它在未来能帮助像我这样的人! (2认同)
  • 如果页面为空白,则意味着在加载DOM之后使用了“ document.write”。解决方案是在所有DOM加载之后不使用`document.write`,或者甚至更好的是根本不使用`document.write`。 (2认同)

Chr*_*eek 7

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

[鼓卷......]

<script>document.write(Date().split` `[3])</script>
Run Code Online (Sandbox Code Playgroud)

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

如果您需要兼容ES5,您可以满足:

<script>document.write(Date().split(' ')[3])</script>
Run Code Online (Sandbox Code Playgroud)

  • 如果您的用户在公元1000年之前回到过去怎么办?或者如果用户使用您的应用程序> 9999 AD怎么办?#responsibleCode#NotAnotherY2K;) (4认同)
  • @NickSteele希望我们不会在那时编写纯JavaScript. (3认同)

Jon*_*ine 6

<div>&copy;<script>document.write(new Date().getFullYear());</script>, Company.
</div>
Run Code Online (Sandbox Code Playgroud)


Kri*_*ern 5

对于 React.js,以下内容在页脚中对我有用......

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