从字符串中提取日期格式为“DD MMM YYYY”

时间:2011-05-19 21:17:38

标签: php regex string date

我正在尝试从字符串变量中提取日期,并希望得到一些帮助。

$editdate = "Content last modified on 17 May 2011 at 23:13";

从这个字符串,我想提取2011年5月17日,请记住,日期会有所不同,代码需要能够以这种格式提取任何日期,DD MMM YYYY。

我想过使用preg_match来做这件事,但是我无法想出一个能够正确提取日期的正确的正则表达式模式。

这可能与正则表达式有关,还是应该使用不同的函数?

感谢您的帮助!

5 个答案:

答案 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位数。