如何查找和提取日期与PHP字符串?



如何在PHP中找到字符串内的日期并提取它?'

示例:我在字符串

中有一个日期
$status = "OK, 26.10.2022 13:24:00, Delivered Zak";

但是下次我只能得到这样的字符串

$status = "28.10.2022 11:20:00, Delivered";

所以用","在这里没有选择,因为每次都在不同的位置。我怎么能每次都有这样的约会?谢谢你的建议。

您可以使用正则表达式来获取字符串中的日期:


// examples
$statuses = [
"OK, 26.10.2022 13:24:00, Delivered Zak",
"28.10.2022 11:20:00, Delivered",
];
foreach ($statuses as $status) {
// Grab 'xx.xx.xxxx xx:xx.xx' 
preg_match('~d{2}.d{2}.d{4}sd{2}:d{2}:d{2}~', $status, $matches);

// Convert to date 
// TODO : test if $matches is not empty
$date = DateTime::createFromFormat("d.m.Y H:i:s", reset($matches));
// echo formatted for the test
echo $date->format("Y-m-d H:i:s")."n";
}

输出:

2022-10-26 13:24:00
2022-10-28 11:20:00

此解决方案使用修剪来删除日期表达式前后的虚假字符。A..Z去掉所有大写字母。简单地使用date_create也可以识别一些其他的日期格式。

$statuses = [
"OK, 26.10.2022 13:24:00, Delivered Zak",
"28.10.2022 11:20:00, Delivered",
"christmas eve 24 Dec 2020 19:00",
"ABC 2022-09-12 13:45, and so on",
];
foreach ($statuses as $status) {
$date = date_create(trim($status,"A..Za..z, "));
echo $date->format("Y-m-d H:i:s")."<br>n";
}

输出:

2022-10-26 13:24:00
2022-10-28 11:20:00
2020-12-24 19:00:00
2022-09-12 13:45:00

演示:https://3v4l.org/uqAmm

如果在特殊情况下trim是不够的,或者如果只接受某些日期格式,可以使用preg_replace来代替trim。

preg_replace('/^[^d]*(.+?)[a-z ,]*$/iu','$1',$status);

相关内容

  • 没有找到相关文章

最新更新