我正在开发一个获取网页"上传日期"的应用程序。所以,我的疑问是如何?
示例:我想获取这篇文章的日期。就像我将此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'));
})())
由于可用的处理比在书签中合理的处理要多,因此您可以在页面中查找日期更广泛的工作。但是,匹配更多可能的日期格式将增加误报匹配的数量。虽然您可以根据看起来无效的日期拒绝合理的数字,但您仍然有很多不准确的数字。
最终,最好使用服务器报告的最后一个修改日期,除非人类指出页面上刮擦的日期之一是准确的,否则最好使用。即使那样,最后一个修改日期也可能是最合适的,具体取决于您使用的日期,您在问题中不说明。