我正在尝试从字符串变量中提取日期,并希望得到一些帮助。
$editdate = "Content last modified on 17 May 2011 at 23:13";
从这个字符串,我想提取2011年5月17日,请记住,日期会有所不同,代码需要能够以这种格式提取任何日期,DD MMM YYYY。
我想过使用preg_match来做这件事,但是我无法想出一个能够正确提取日期的正确的正则表达式模式。
这可能与正则表达式有关,还是应该使用不同的函数?
感谢您的帮助!
答案 0 :(得分:10)
尝试:
$timestamp = strtotime( str_replace( array("Content last modified ", "at"), "", $editdate ) );
哪会留下一个纪元时间戳,然后您可以输出,但是您喜欢使用date()
答案 1 :(得分:3)
这可以使用正则表达式。给定格式DD MMM YYYY,你需要一个匹配两个(或一个?)数字的正则表达式,然后是一个空格,三个字母,一个空格和四个数字。
这看起来像是:
$regex = '/(\d{2} [a-z]{3} \d{4})/i';
这可以进一步优化。
答案 2 :(得分:2)
假设你的字符串的文本内容总是相同的,并且总是以时间结束......
$editdate = substr($editdate, 25, -9); // 17 May 2011
但是,如果要更改日期格式,这是非常不灵活的。
答案 3 :(得分:1)
试试这个'un:
preg_match('/(\d?\d [A-Za-z]+ \d\d\d\d) at (\d\d\:\d\d)/', $editdate, $matches);
print_r($matches);
$date = $matches[1];
$time = $matches[2];
我认为在所有情况下都会起作用(虽然它非常丑陋).... :)
答案 4 :(得分:0)
这可能是诀窍的模式:
([0-9]){1}([0-9]){0,1}(\s.*\s)([0-9]){4}
搜索1位数,然后可能会有另一位数,然后是空格和字符,空格和4位数。