获取当前文档javascript日期对象中的最后修改日期

时间:2012-11-16 01:16:01

标签: javascript date browser

浏览器provides a way to determine a document's last-modified date,查看document.lastModified。此属性由HTTP Last-Modified标头确定,并以字符串形式返回。

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

var date = new Date(document.lastModified);

成功解析字符串。但是,我很好奇这是否适用于跨浏览器和跨区域设置。

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

6 个答案:

答案 0 :(得分:3)

你不能var anotherDateObject = new Date(Date.parse(document.lastModified)); 只是因为javascript不会将字符串解析为Date Object,直到它包含日期部分中的'/''-'以外的任何分隔符(时间部分对{{1}没有问题) Javascript可以解析一个有空格作为分隔符的有效日期字符串。这里是

empty space

答案 1 :(得分:2)

我想说你需要为基于Webkit的浏览器提供一个特例,直到完成HTML5规范。

根据HTML5 draftdocument.lastModified对实施的要求非常明确:

  

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

     
      
  1. 日期的月份部分。
  2.   
  3. “/”(U + 002F)字符。
  4.   
  5. 日期的日期部分。
  6.   
  7. “/”(U + 002F)字符。
  8.   
  9. 日期的年份部分。
  10.   
  11. U + 0020 SPACE角色。
  12.   
  13. 当时的小时部分。
  14.   
  15. 一个“:”(U + 003A)角色。
  16.   
  17. 时间的分钟部分。
  18.   
  19. 一个“:”(U + 003A)角色。
  20.   
  21. 时间的秒组件。
  22.   

简而言之,即用户的本地时区中的"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"也没有问题,您可以随时将其重建为ISO 8601,这在ECMAScript标准中是可接受的。但我认为目前的主流浏览器可以正确地将格式解析为本地时间,这也是ECMAScript中的预期和标准。

答案 2 :(得分: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;
}

`

答案 3 :(得分:1)

据我所知,目前使用的所有主流浏览器都支持此属性。存储的值以当地时间格式MM/dd/yyyy HH:mm:ss

我认为您可以在所有浏览器和区域设置中使用此属性。

答案 4 :(得分:1)

Vis-á-visivivetter的评论,“现在,我认为,标准本身,每个浏览器都可以做任何他们喜欢的事情,因为我无法在HTML4,XHTML,DOM 2中找到关于document.lastModified的任何内容。 DOM 3.我相信它只在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除了继续忽略)! LOL

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

更新:如果您激活工具| Web开发人员| DOM Inspector,Firefox 28愉快地执行“javascript:alert(document.lastModified)”并返回当地时间!多么混搭。 LOL

答案 5 :(得分:0)

以下是一个例子:

<!--
        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>