Я извлекаю некоторые данные из моей базы данных для вывода в файл .csv
.Эти выведенные строки могут включать или не включать две даты в нескольких различных форматах, включая:
YYYY-MM-DD (2019-02-01)
DD.MM.YYYY (01.02.2019)
D.M.YYYY (1.2.2019)
DD.MM.YY (01.02.19)
D.MM.YY (1.02.19)
D.MM.YYYY (1.02.2019)
Эти две даты обычно располагаются в конце строки, однако есть несколько случаев, когда даты находятся всередина строки.Вот несколько примеров строк, выведенных из базы данных:
Product 1, 1.10.2018 - 31.12.2018 just a test string
Product 2 15.12.18-23.6.19
Теперь я хотел бы проанализировать обе эти даты в одном формате (ДД.ММ.ГГГГ), если он найден из строки всобственные переменные.
Если в строке не найдены даты, строку можно пока игнорировать.Вот что я попробовал до сих пор:
<?php
function contains_date($str) {
if (preg_match('/\b(\d{4})-(\d{2})-(\d{2})\b/', $str, $matches)) {
if (checkdate($matches[2], $matches[3], $matches[1])) {
return true;
}
}
return false;
}
$i = 0;
$table = [];
while($row = $stmt->fetch()) {
if(contains_date($row['product'])) {
$product = preg_replace('/\s+/', '', $row['product']);
$date = substr($product, -21);
$periodStart = date('d.m.Y', strtotime(substr($date, 0, 10)));
$periodEnd = date('d.m.Y', strtotime(substr($date, 11)));
}
$table[$i]['product'] = $row['product'];
$table[$i]['startDate'] = $periodStart;
$table[$i]['endDate'] = $periodEnd;
$i++;
}
?>
Это работает в тех случаях, когда дата указана в формате ГГГГ-ММ-ДД, и если эти две даты находятся в конце строки.Он не охватывает все случаи, когда формат даты отличается, или если даты находятся в середине строки.Любая помощь будет высоко ценится!