我需要更新几百个在页脚中具有硬编码版权日期的静态HTML页面。我想用一些每年会自动更新的JavaScript替换它。
目前我正在使用:
<script type="text/javascript">var year = new Date();document.write(year.getFullYear());</script>
这是否足够短?
答案 0 :(得分:469)
这是我能得到的最短时间:
<script>document.write(new Date().getFullYear())</script>
这适用于我遇到的所有浏览器。
我是如何到达那里的:
getFullYear
上调用Date
,无需变量。 new Date().getFullYear()
可能看起来有点奇怪,但它很可靠:首先完成new Date()
部分,然后执行.getFullYear()
。type
,因为JavaScript是默认设置;这甚至被记录为HTML5 specification的一部分,在这种情况下可能正在编写已经做过的浏览器。请务必注意,这仅适用于启用了JavaScript的浏览器。理想情况下,这可以更好地作为离线批处理作业(* nix上的sed
脚本等)每年处理一次,但如果您想要JavaScript解决方案,我认为这样做的时间很短。 (现在我走了,试探命运。)
答案 1 :(得分:25)
TJ的答案非常好,但我遇到了一个场景,我的HTML已经呈现,而document.write脚本只会覆盖日期年份的所有页面内容。
对于此方案,您可以使用以下代码将文本节点附加到现有元素:
<div>
©
<span id="copyright">
<script>document.getElementById('copyright').appendChild(document.createTextNode(new Date().getFullYear()))</script>
</span>
Company Name
</div>
答案 2 :(得分:11)
<script type="text/javascript">document.write(new Date().getFullYear());</script>
答案 3 :(得分:11)
如果您希望将来包含一个时间范围,将当前年份(例如2017年)作为开始年份,那么明年它将如下所示:“©2017-2018,Company。”,然后使用以下代码。它会每年自动更新:
© Copyright 2017<script>new Date().getFullYear()>2017&&document.write("-"+new Date().getFullYear());</script>, Company.
©2017-2018,公司版权所有。
但是如果第一年已经过去了,那么最短的代码可以写成:
© Copyright 2010-<script>document.write(new Date().getFullYear())</script>, Company.
答案 4 :(得分:8)
JS解决方案效果很好,但我会建议服务器端解决方案。我检查的一些网站将整个页面的这个问题变成空白,只是偶尔会看到一年。
原因是 document.write 实际写了整个文档。
我让我的朋友实施了服务器端解决方案,这对他有用。 php中的简单代码
<?php echo date('Y'); ?>
享受!
答案 5 :(得分:7)
这是最终最短的最负责任的版本,甚至适用于AD和BC。
[鼓卷......]
<script>document.write(Date().split` `[3])</script>
就是这样。比接受的答案短6个字节。
如果你需要兼容ES5,你可以选择:
<script>document.write(Date().split(' ')[3])</script>
答案 6 :(得分:2)
根据Chrome审核
对于连接速度慢的用户,动态注入外部脚本 通过
document.write()
可以将页面加载延迟数十秒。https://web.dev/no-document-write/?utm_source=lighthouse&utm_medium=devtools
所以没有错误的解决方案是:
(new Date).getFullYear();
答案 7 :(得分: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();
}
})();
});
答案 8 :(得分:1)
<div>©<script>document.write(new Date().getFullYear());</script>, Company.
</div>
答案 9 :(得分:1)
对于React.js,以下是在页脚中对我有用的...
render() {
const yearNow = new Date().getFullYear();
return (
<div className="copyright">© Company 2015-{yearNow}</div>
);
}
答案 10 :(得分:1)
以上专家提供了许多解决此问题的方法。可以使用下面的解决方案,该方法将not block
页rendering
或not even re-trigger
的页面。
使用纯Javascript:
window.addEventListener('load', (
function () {
document.getElementById('copyright-year').appendChild(
document.createTextNode(
new Date().getFullYear()
)
);
}
));
<div> © <span id="copyright-year"></span></div>
在jQuery中:
$(document).ready(function() {
document.getElementById('copyright-year').appendChild(
document.createTextNode(
new Date().getFullYear()
)
);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div> © <span id="copyright-year"></span></div>
答案 11 :(得分:1)
最近的更新导致我所有的WordPress页脚版权日期都被下推到页面末尾,而不是像以前那样以内联方式编写。我确信在其他情况下也可能会发生这种情况,但这只是我注意到的地方。
如果发生这种情况,您可以通过创建一个空的span标签并像这样注入日期来解决它:
<span id="cdate"></span><script>document.getElementById("cdate").innerHTML = (new Date().getFullYear());</script>
或者如果您在网站上启用了jquery,则可以这样简单一些:
<span id="cdate"></span><script>$("#cdate").html(new Date().getFullYear());</script>
这与Adam Milecki的答案类似,但更短
答案 12 :(得分:1)
使用 document.write
不是一个好习惯。您可以通过按 here 了解有关 document.write 的更多信息。除非万不得已,否则不要使用 document.write。这是一个有点友好的 javascript/html 解决方案。是的,有一些关于 InnerHTML 是如何糟糕的研究,正在研究一个更友好的灵魂。
document.getElementById("year").innerHTML=(new Date).getFullYear();
↑ javascript
↓ html
<span id="year"></span>
您可以将 javascript 代码放在 html 中,但最好放在 javascript 文件中。很干净的回答。就个人而言,我建议使用 PHP 编写当前年份。可能是最安全的答案。
如果你想用 PHP 编写当前年份,你可以用这个小代码来实现。
<?php echo date("Y"); ?>
请记住,为了应用此 PHP 代码,您的网页文件必须是 PHP。
答案 13 :(得分:0)
如果您在网站上多次需要当前年份,您可以这样做:
document.querySelectorAll("copy-year").forEach(el => {
el.textContent = `${el.textContent} - ${new Date().getFullYear()}`;
});
Copyright Company <copy-year>1234</copy-year> ©
我知道,这不是最短的方法,但效果很好。
PS:您需要在页面底部使用 JS 或在 script 标签上使用 defer 属性。
答案 14 :(得分:0)
全年:
document.getElementById("getyear").innerHTML = (new Date().getFullYear());
<span id="getyear"></span>