Вы потеряли информацию, когда вы конвертированы дату (1-31) в течение месяца (1-12), так что на основе того, что я видел, все ваши неправильно отформатированных даты может быть одна из 2-3 других дат. Следующий код выводит на экран другие возможные даты, если вы дадите ему одну из ваших неправильных дат. Я думаю, что это все, что вы можете сделать:
$date = DateTime::createFromFormat('d/m/Y', '12/26/1987');
$possible_dates = array();
$remainder_start = 0;
$days_in_month = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
while ($remainder_start <= $days_in_month[intval($date->format("m")])
{
$possible_dates[] = DateTime::createFromFormat("m/d/Y", $date->format("d")."/".(intval($date->format("m"))+$remainder_start)."/".(intval($date->format("Y"))-($remainder_start/12)));
$remainder_start += 12;
}
foreach ($possible_dates as $d)
{
echo $d->format("m/d/Y")."\n";
}
Это напечатает 12/02/1989 12/14/1988 12/26/1987
Ваш месяц будет всегда прав, даже в ту дату, так как вы положили, что в положении день, но ваши годы и дни будет одной из нескольких комбинаций.
Если день в оригинальную дату был 12-го числа месяца или раньше, ваша «неправильная» дата на самом деле по-прежнему правильная.
Имеет ли база данных дату '12/26/1987' или' 10/02/1989'? – Matt
Значение хранится в базе данных: '10/02/1989 '(неправильный формат) – moc4yu
У вас нет информации о дате поступления? Я не уверен, что это возможно без по крайней мере некоторой информации, например, год –