2012-12-18 30 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])); 
}