11

浏览器提供了一种通过查看来确定文档的最后修改日期的方法document.lastModified。此属性由 HTTPLast-Modified标头确定,并以字符串形式返回。

我的目标是将此属性转换为 JavascriptDate对象。目前我正在使用

var date = new Date(document.lastModified);

它成功地解析了字符串。但是,我很好奇这是否适用于跨浏览器和跨语言环境。

对我来说非常有趣的是document.lastModified表示与给定 HTTP 标头相同的日期Last-Modified,但字符串不相同。在我看来,浏览器会解析Last-Modified标题,将其转换为其内部日期表示,然后document.lastModified基于此设置为字符串。如果是这种情况,document.lastModified可能会以某种方式对其进行格式化,以便 JavascriptDate构造函数对其进行解析,因为它们都可能使用相同的语言环境和格式化规则。但我一直无法确定这一点。

4

6 回答 6

3

你不能var anotherDateObject = new Date(Date.parse(document.lastModified)); 仅仅因为javascript不会将字符串解析为日期对象,直到它包含任何分隔符(如日期部分'/''-'其他empty space日期部分(时间部分没有问题':')。Javascript可以解析带有空格作为分隔符的有效日期字符串。这里它是

<html>
<body>
<script>
    var dt = document.lastModified;    
    dt = dt.replace("/", " ");
    dt = dt.replace("/", " ");
    dt = dt.replace("-", " ");
    dt = dt.replace("-", " ");
    // '/' or '-' replcae these separtors with empty space
    // Now your string can be parsed to Date Object
    var anotherDateObject = new Date(Date.parse(dt));
    alert(anotherDateObject + " -- " + anotherDateObject.getHours());        
</script>
</body>
</html>
于 2012-11-16T04:49:22.500 回答
2

尝试这个 ?`

function getLastMod() {
    var lastMod = Date.parse(document.lastModified);
    var now = new Date();
    var diff = (new Date(now.toLocaleString())).getTimezoneOffset() - now.getTimezoneOffset();
    if (!diff) diff = now.getTimezoneOffset() * 60000;
    else diff = 0;
    return lastMod - diff;
}

`

于 2015-01-09T17:36:53.920 回答
2

我想说在 HTML5 规范最终确定之前,您需要为基于 Webkit 的浏览器提供一个特殊情况。

根据HTML5 草案document.lastModified对实现有非常明确的要求:

lastModified 属性在获取时必须返回文档源文件最后修改的日期和时间,在用户的本地时区中,格式如下:

  1. 日期的月份部分。
  2. 一个“/”(U+002F)字符。
  3. 日期的日部分。
  4. 一个“/”(U+002F)字符。
  5. 日期的年份部分。
  6. 一个 U+0020 空格字符。
  7. 时间的小时部分。
  8. 一个“:”(U+003A)字符。
  9. 时间的分钟部分。
  10. 一个“:”(U+003A)字符。
  11. 时间的秒部分。

简而言之,就是"MM/DD/YYYY hh:mm:ss"在用户的本地时区。这意味着如果有相同的要求,当 HTML5 最终确定时,Webkit 会做错。

此外,修改日期的来源必须符合

文档的源文件的最后修改日期和时间必须来自所使用的网络协议的相关特性,例如来自文档的 HTTP Last-Modified 标头的值,或者来自本地文件的文件系统中的元数据。如果上次修改日期和时间未知,则该属性必须以上述格式返回当前日期和时间。

目前,我认为,标准本身,每个浏览器都可以做他们喜欢的任何事情,因为我在 HTML4、XHTML、DOM 2 或 DOM 3 中找不到任何东西document.lastModified。我相信它只在 HTML5 中定义。

一旦每个人都符合标准,即使一个浏览器无法解析也没有问题"MM/DD/YYYY hh:mm:ss",您可以随时将其重构为ECMAScript标准所接受的ISO 8601。但我认为当前主流浏览器可以将格式正确解析为本地时间,这在 ECMAScript 中也是预期和标准的。

于 2012-11-23T20:57:21.457 回答
1

据我所知,今天使用的所有主要浏览器都支持此属性。存储的值是本地时间的格式MM/dd/yyyy HH:mm:ss

我认为您可以在所有浏览器和语言环境中使用此属性。

于 2012-11-16T03:46:21.573 回答
1

这是一个例子:

<!--
        function makeArray() {
          for (i = 0; i < makeArray.arguments.length; i++)
            this[i] = makeArray.arguments[i];
        }

        function getFullYear(d) {
          var y = d.getYear();
          if (y < 1000) {
            y += 1900
          };
          return y;
        }

        var days = new makeArray("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
        var months = new makeArray("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");

        function format_time(t) {
            var Day = t.getDay();
            var Date = t.getDate();
            var Month = t.getMonth();
            var Year = getFullYear(t);
            timeString = "";
            timeString += days[Day];
            timeString += " ";
            timeString += months[Month];
            timeString += " ";
            timeString += Date;
            timeString += ", ";
            timeString += Year;
            return timeString;
          }
// -->

        m = new Date(document.lastModified);
        d = new Date();
        $(function() {
          $('.timestamp').html(format_time(m))
        });
.timestamp-wrap { font-size : 22px; font-family : 'Open Sans'; }
.timestamp { color: green; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="timestamp-wrap">
  Updated on <span class="timestamp"></span>
</div>

于 2015-02-19T11:34:31.327 回答
1

Vis-á-vis livibetter 的评论,“现在,我认为,就其本身而言,每个浏览器都可以做他们喜欢做的任何事情,因为我在 HTML4、XHTML、DOM 2 或 DOM 3 中找不到关于 document.lastModified 的任何内容。我相信它只在 HTML5 中定义”

我相信“document.lastModified”已经存在了一段时间。我已经在一个网站上使用它几年了(在 HTML5 之前)。并不是说它真的很重要。如果有人关心(在 Windows XP SP3 下)我保留的浏览器来检查页面:

· Chrome 34 仍然坚持返回 UTC 时间(但没有添加本地时间)
· Firefox 28 只是忽略语句“javascript:alert(document.lastModified)”!:D
·IE8 返回本地时间(正如其他人指出的那样)
·Opera 12.16 返回本地时间
·Safari 5.1.7 返回 UTC 时间

至少他们的日期是正确的;他们都在我的主页上返回了 11/17/09(除了 Firefox,它只是继续忽略)!哈哈

如果像 W3Schools ( http://www.w3schools.com/jsref/prop_doc_lastmodified.asp ) 这样的参考资源会在这些方面添加一些措辞,这样人们就知道当结果很时髦时会发生什么,那就太好了。

更新:如果您激活工具 | 网页开发者 | DOM Inspector,Firefox 28 愉快地执行“javascript:alert(document.lastModified)”并返回本地时间!什么杂烩。哈哈

于 2014-04-24T20:02:13.880 回答