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

2022-08-30 00:06:13

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

目前我正在使用:

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

这是它变得那么短吗?


答案 1

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

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

字符串 from 中的第一个四位数字序列被指定为年份。(这不是特定的行为 - 尽管这很常见 - 当我在下面的原始答案发布时。Date()

当然,这个解决方案只适用于另外7,979年(截至2021年撰写本文时),因为截至10000年,它将显示“1000”而不是“10000”。


你已经要求一个JavaScript解决方案,所以这是我能得到的最短的:

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

这将在我遇到的所有浏览器中工作。

我如何到达那里:

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

重要的是要注意,这仅适用于启用了JavaScript的浏览器。理想情况下,这最好作为一个离线批处理作业(*nix上的脚本等)每年处理一次,但是如果你想要JavaScript解决方案,我认为它已经很短了。(现在我走了,诱惑命运。sed


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


答案 2

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

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

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