2012-12-18 32 views
1

字符串我有两个不同的字符串:认识日期用PHP

  • 婴儿14%28.07.2012
  • 您好2%16年6月15日十

( “宝贝” 或“ 14%”或‘十’可以改变的,所以我不能指定他们)

我要认识到字符串中的日期和我试着用:

$dt = date_parse($string); 

在第一种情况下,没关系,但在第二种情况下,它不能识别日期。

我尝试没有成功

$dt = date_parse_from_format("d.m.Y", $string); 

,我试图用的preg_match或preg_match_all没有成功(我不是很擅长)。

回答

6

你能赶上的日期用正则表达式,例如:

if(preg_match('/(.*)([0-9]{2}\.[0-9]{2}\.[0-9]{2,4})(.*)/', $yourString, $matches)) 
{ 
$date = $matches[2]; 
} 
2

你提到宝宝,14%和十可以改变。但它总是一个单词/价值?如果是这样你可以使用:

$split = explode(' ', $string) 
$date = $split[2]; 

//$split[0] = Baby 
//$split[1] = 14% 
//$split[2] = 28.07.2012 

//$date = 28.07.2012 

//$split[0] = Hello 
//$split[1] = 2% 
//$split[2] = 15.06.16 
//$split[3] = Ten 

//$date = 15.06.16 
+0

没有,多个单词。 –

+0

然后aurel.g对你有帮助。 –

0

我喜欢aurel.g的答案,并扩大它为了我自己的目的。特别是,我想处理Excel不断改变我的好日子的两位数年份。如果日期是双层的,我还使用strtotime()返回FALSE(如6/32/2014)。我想这可能是有益的(我没有找到一个方法来张贴此作为注释以上,不好意思):

$result = preg_match("/^(.*)(\d{1,2}\/\d{1,2}\/\d{2,4})(.*)/",$date, $matches); 
// use strtotime() to test if that's a valid date: 
if ($result && strtotime($matches[2]) { 
    // convert it back to the date in the desired format: 
    return date('m/d/Y',strtotime($matches[2])); 
}