2012-12-18 1 views
1

У меня есть две разные строки:Признать дату в строку с PHP

  • младенца 14% 28.07.2012
  • Здравствуйте 2% 15.06.16 Десять

("ребенка" или " 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])); 
}