我如何在 PHP 的字串中找到日期并提取它?
示例:我在字串中有一個日期
$status = "OK, 26.10.2022 13:24:00, Delivered Zak";
但下次我只能得到如下所示的字串:
$status = "28.10.2022 11:20:00, Delivered";
所以用“,”將它分解成碎片在這里不是一個選項,因為每次都處于不同的位置。我怎樣才能每次都得到這個日期?感謝您的任何建議。
uj5u.com熱心網友回復:
您可以使用正則運算式獲取字串中的日期:
// 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}\s\d{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
uj5u.com熱心網友回復:
此解決方案使用trim洗掉日期運算式前后的虛假字符。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);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/533668.html
標籤:PHP细绳日期
