2015-12-23 2 views
3

Я случайно ошибался, преобразовывая строку на сегодняшний день с неправильным форматом (с месяца на сегодняшний день). Так вот что я сделал:function to reverse DateTime :: createFromFormat/date_create_from_format

DateTime::createFromFormat('d/m/Y', '12/26/1987')->format("d/m/Y"); 

так что outputing неправильной даты, от 12/26/1987 стало 10/02/1989, и я сэкономить много неправильной дату в базу данных. Есть ли какой-либо обратный метод или просвет, чтобы получить исходную дату до ее преобразования.

спасибо заранее

+0

Имеет ли база данных дату '12/26/1987' или' 10/02/1989'? – Matt

+0

Значение хранится в базе данных: '10/02/1989 '(неправильный формат) – moc4yu

+0

У вас нет информации о дате поступления? Я не уверен, что это возможно без по крайней мере некоторой информации, например, год –

ответ

1

Вы потеряли информацию, когда вы конвертированы дату (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-го числа месяца или раньше, ваша «неправильная» дата на самом деле по-прежнему правильная.

+0

Я попытался изменить этот код, но я не могу получить право стоимость. за потерянную информацию, можно ли ее извлечь из «неправильной» даты? потому что все у меня есть только эта неправильная дата. – moc4yu

+0

Насколько я могу судить, вы не можете получить исходную дату, но вы можете получить несколько дат, которые МОЖЕТ быть, извините, чтобы сообщить вам –

+0

, так ли это невозможно получить правильный? Слишком много возможностей я получаю от этого кода с разными вводами – moc4yu