小编典典

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

all

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

目前我正在使用:

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

这是尽可能短的吗?


阅读 84

收藏
2022-04-25

共1个答案

小编典典

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

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

Date()字符串 from中的第一个四位数字序列指定为 year。(当我在下面发布我的原始答案时,虽然这很常见,但这不是指定的行为。)

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


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

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

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

我是如何到达那里的:

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

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


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

2022-04-25