为什么 javascript document.lastModified 会停止工作并返回当前日期?

为什么 javascript document.lastModified 会停止工作并返回当前日期?

我在 Ubuntu 上有一些网页,它使用 javascript 返回最后修改日期作为显示文本的一部分,以创建以下内容:

Last modified: 08/28/2017

这是网页的实际最后修改日期。但最近,我得到了返回的当前日期。我没有对页面进行任何更改。我已经检查过,每个曾经正确返回lastModified的网页都会发生这种情况。我的 Macintosh 上有其中一些页面,我可以从我的“本地主机”调用它们。他们给出了正确的最后修改日期,我比较了 Ubuntu 版本和我的 Macintosh 版本之间的几个网页,它们在内容、创建日期和最后修改日期方面是相同的。

有人知道发生了什么事吗?下面是我用来仅返回日期部分的 JavaScript,省略了 LastModified 的时间部分:

Last modified:
<script language="JavaScript">
var testlast=document.lastModified;
testlast=testlast.substr(0,10);
document.write(" "+testlast);
</script>

在 Ubuntu 中,现在会生成:

Last Modified: 09/02/2018

在我的 Mac 上,它仍在生成:

Last modified: 08/28/2017

答案1

我相信我已经找到了从不同服务器(浏览器本地或外部)获取“上次修改日期”问题的解决方案。诀窍是在 html 文档中将 SSI(服务器端指令)与 Javascript 结合起来。这是我几乎可以插入文档中任何位置的代码:

Last modified:
<script language="JavaScript">
var tconfig = '<!--#config timefmt="%m-%d-%Y" --><!--#echo  var="LAST_MODIFIED" -->';
var testlast=document.lastModified;
var tsize=tconfig.length;
if ((tsize > 20) || (tsize < 2))
{ document.write(" "+testlast.substr(0,10)); }
else document.write(" "+tconfig);
</script><br />

当服务器获取文档时,将执行 SSI 指令,并用结果值替换指令。因此,tconfig 成为撇号内的字符串。如果不执行SSI指令,则保留包含该指令的注释,该注释是一个长字符串。变量集有一个字符串大小,可以在客户端(浏览器)执行 JavaScript 时进行测试。如果在合理的范围内,它应该是服务器确定的“最后修改日期”。如果不是,那么 Javascript 会尝试从“testlast”变量中确定它。要么输出 testlast 的子字符串,要么输出“tconfig”值。更糟糕的情况是,您将从 Javascript 的 testlast 变量中获取今天的日期。

我在所有希望显示“上次修改时间:”的文档中都使用了此补丁。顺便说一句,请注意,我在 SSI 代码中使用了破折号,在 Javascript 代码中使用了斜杠(默认分隔符)。然后我可以轻松区分哪个机制提供了价值。

相关内容