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

新手上路,请多包涵

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

目前我正在使用:

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

这是尽可能短的吗?

原文由 tpow 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 679
2 个回答

多年后,当我做其他事情时,我被提醒 Date() (没有 new )返回一个字符串,并且是一个比我下面的原始字符短 一个 字符的方式:

 <script>document.write(/\d{4}/.exec(Date())[0])</script>

来自 Date() 的字符串中的第一个四位数字序列被 指定为 year 。 (当我在下面的原始答案发布时,这不是指定的行为——尽管它很常见。)

当然,此解决方案仅在另外 7,979 年有效(截至 2021 年撰写本文时),因为从 10000 年开始,它将显示“1000”而不是“10000”。


您要求提供 JavaScript 解决方案,所以这是我能得到的最短的解决方案:

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

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

我是如何到达那里的:

  • 您可以直接在新创建的 Date 上调用 getFullYear ,不需要变量。 new Date().getFullYear() 可能看起来有点奇怪,但它是可靠的:首先完成 new Date() 部分,然后是 .getFullYear()

  • 你可以去掉 type ,因为 JavaScript 是默认的;这甚至被记录为 HTML5 规范 的一部分,在这种情况下,这很可能是在编写浏览器已经在做的事情。

  • 您可以在末尾删除分号以获得额外保存的字符,因为 JavaScript 具有“自动分号插入”,这是我通常 鄙视 和反对的功能,但在这个特定用例中,它应该足够安全。

请务必注意,这仅适用于启用 JavaScript 的浏览器。理想情况下,最好将其作为离线批处理作业(*nix 上的 sed 脚本等)处理一次,但如果您想要 JavaScript 解决方案,我认为这将尽可能短。 (现在我已经去试探命运了。)


但是,除非您使用 只能 提供静态文件的服务器,否则最好在服务器上使用模板引擎执行此操作并使用缓存标头来允许缓存结果页面,直到需要更改日期为止。这样,您就不需要客户端上的 JavaScript。在内容中使用非 defer / async script 标签也会短暂地延迟页面的解析和呈现(正是因为这个原因:因为脚本中的代码可能使用 document.write 来输出 HTML)。

原文由 T.J. Crowder 发布,翻译遵循 CC BY-SA 4.0 许可协议

TJ 的回答非常好,但我遇到了一种情况,我的 HTML 已经呈现,并且 document.write 脚本将仅使用日期年份覆盖所有页面内容。

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

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

原文由 Adam Milecki 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题