用php识别字符串中的日期

时间:2012-12-18 11:16:46

标签: php date datetime time date-parsing

我有两个不同的字符串:

  • 宝贝14%28.07.2012
  • Hello 2%15.06.16 Ten

(“baby”或“14%”或“ten”可以更改,因此我无法指定它们)

我想识别该字符串中的日期,并尝试使用:

$dt = date_parse($string);

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

我尝试没有成功

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

我尝试使用preg_match或preg_match_all但没有成功(我不是很擅长)。

3 个答案:

答案 0 :(得分:6)

您可以使用正则表达式捕获日期,例如:

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

答案 1 :(得分:2)

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

$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

答案 2 :(得分:0)

我喜欢aurel.g的答案,并为了我自己的目的扩展了一些。特别是,我想处理Excel不断转换我的好约会的两位数年份。如果日期是下铺(例如6/32/2014),我还使用strtotime()返回FALSE。我认为这可能会有所帮助(我没有找到一种方法将其作为上述评论发布,抱歉):

$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]));
}