函数来反转DateTime :: createFromFormat / date_create_from_format

时间:2015-12-23 04:21:46

标签: php datetime format

我通过将字符串转换为日期格式错误(月初至今)而意外地犯了错误。所以这就是我所做的:

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

所以它输出错误的日期,从1987年12月26日变为19/02年8月,我已经将大量错误的日期保存到数据库中。 是否有任何反向方法或启示才能在转换之前获得原始日期。

提前谢谢

1 个答案:

答案 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天,或者您的“错误”日期实际上仍然正确。