我通过将字符串转换为日期格式错误(月初至今)而意外地犯了错误。所以这就是我所做的:
DateTime::createFromFormat('d/m/Y', '12/26/1987')->format("d/m/Y");
所以它输出错误的日期,从1987年12月26日变为19/02年8月,我已经将大量错误的日期保存到数据库中。 是否有任何反向方法或启示才能在转换之前获得原始日期。
提前谢谢
答案 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天,或者您的“错误”日期实际上仍然正确。