如何获取上载在服务器中的页面的日期(HTML,PHP ..等)



我正在开发一个获取网页"上传日期"的应用程序。所以,我的疑问是如何?

示例:我想获取这篇文章的日期。就像我将此URL发送到程序时一样,它应该给出日期(上传日期)作为输出。

我想要此URL的日期:http://refer2earn.16mb.com/

来自php官方文档http://php.net/manual/en/en/function.filemtime.php

<?php
// outputs e.g.  somefile.txt was last modified: December 29 2002 22:16:23.
$filename = 'somefile.txt';
if (file_exists($filename)) {
    echo "$filename was last modified: " . date ("F d Y H:i:s.", filemtime($filename));
}
?>

有关网页中日期的更详细讨论,请参阅我对网站的回答:如何确定年度?在学术界。

如果将最后一个修改日期设置为当前日期,则确定页面上的日期可能很复杂。当日期设置为当前日期时,通常但并非总是会表明该页面是开发生成的(例如,从数据库中)。那时您唯一可以做的就是尝试刮擦看起来像日期的内容的页面。但是,这可能很复杂,通常需要人类干预才能确定使用哪个日期是正确的日期。

下面是一个书签,既显示最后修改的日期又将刮擦某些常见日期格式的页面:

javascript: void((function () {
    var toRm = document.getElementById('showTagsWithDate');
    if (toRm) {
        document.body.removeChild(toRm);
    }
    var tags = [];
    function addMoreDates(reg) {
        var addTags = document.documentElement.innerHTML.match(reg);
        if (addTags) {
            addTags.forEach(function (newTag) {
                if (tags.indexOf(newTag) === -1) {
                    tags.push(newTag);
                }
            });
        }
    }
    addMoreDates(/(20dd|1ddd)[s/-.,]s*([1-9]|0[1-9]|[1][012])[s/-,.]s*([1-9]|0[1-9]|[12]d|3[01])s*(st|nd|rd|th){0,1}(?=D)/img);
    addMoreDates(/([1-9]|0[1-9]|[12]d|3[01])(st|nd|rd|th){0,1}[/-s]s*(january|february|march|april|may|june|july|august|september|october|november|december|jan|feb|mar|apr|may|jun|jul|aug|sep|sept|oct|nov|dec)[s,./-][s,./-]?s*(20dd|1ddd)/img);
    addMoreDates(/(january|february|march|april|may|june|july|august|september|october|november|december|jan|feb|mar|apr|may|jun|jul|aug|sep|sept|oct|nov|dec)[s,./-][s,./-]?s*([1-9]|0[1-9]|[12]d|3[01])(st|nd|rd|th){0,1}[s,.-]+(20dd|1ddd)/img);
    addMoreDates(/b([1-9]|0[1-9]|[1][012])[s/-.,]s*([1-9]|0[1-9]|[12]d|3[01])[s/-,.]s*(20dd|1ddd)s*b/img);
    addMoreDates(/b([1-9]|0[1-9]|[12]d|3[01])[s/-.,]s*([1-9]|0[1-9]|[1][012])[s/-,.]s*(20dd|1ddd)s*b/img);
    addMoreDates(/b(winter|spring|summer|fall|autumn|january|february|march|april|may|june|july|august|september|october|november|december|jan|feb|mar|apr|may|jun|jul|aug|sep|sept|oct|nov|dec)[s,./-][s,./-]?s*(20dd|1ddd)b/img);
    addMoreDates(/(20dd|1ddd)[s,./-]s*(winter|spring|summer|fall|autumn|january|february|march|april|may|june|july|august|september|october|november|december|jan|feb|mar|apr|may|jun|jul|aug|sep|sept|oct|nov|dec)/img);
    addMoreDates(/b(20dd|1ddd)(0[1-9]|[1][012])(0[1-9]|[12]d|3[01])b/img);
    tags.sort(function (a, b) {
        var aVal = Date.parse(a);
        var bVal = Date.parse(b);
        if (aVal === bVal) {
            return 0;
        }
        if (aVal > bVal) {
            return 1;
        }
        return -1;
    });
    if (tags.length === 0) {
        tags = ['No dates were detected in the page.'];
    }
    document.body.insertAdjacentHTML('afterbegin', '<div id="showTagsWithDate" style="background-color:white;color:black;">The page was last modified on ' + document.lastModified + '<br>Dates in the HTML in multiple numeric and English language formats:<ul/></div>');
    var myul = document.body.firstChild.lastChild;
    tags.forEach(function (tag) {
        myul.appendChild(document.createElement('LI')).appendChild(document.createTextNode(tag));
    });
    document.body.firstChild.appendChild(document.createElement('BR'));
})())

由于可用的处理比在书签中合理的处理要多,因此您可以在页面中查找日期更广泛的工作。但是,匹配更多可能的日期格式将增加误报匹配的数量。虽然您可以根据看起来无效的日期拒绝合理的数字,但您仍然有很多不准确的数字。

最终,最好使用服务器报告的最后一个修改日期,除非人类指出页面上刮擦的日期之一是准确的,否则最好使用。即使那样,最后一个修改日期也可能是最合适的,具体取决于您使用的日期,您在问题中不说明。

最新更新