1

我有两个不同的字符串:

  • 婴儿 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 没有成功(我不太擅长)。

4

3 回答 3

6

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

if(preg_match('/(.*)([0-9]{2}\.[0-9]{2}\.[0-9]{2,4})(.*)/', $yourString, $matches))
{
 $date = $matches[2];
}
于 2012-12-18T11:23:12.407 回答
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
于 2012-12-18T11:25:30.677 回答
0

我喜欢 aurel.g 的答案,并出于我自己的目的对其进行了扩展。特别是,我想处理 Excel 不断将我的好日期转换成的两位数年份。如果日期是假的(如 2014 年 6 月 32 日),我还使用 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]));
}
于 2014-08-30T02:19:04.893 回答