我不小心把字符串转换成格式错误的日期(从月份到日期)。我所做的是:
DateTime::createFromFormat('d/m/Y', '12/26/1987')->format("d/m/Y");
所以它输出了错误的日期,从1987年12月26日到1989年2月10日,我把很多错误的日期保存到了数据库中。
在转换原始日期之前,是否有任何相反的方法或启示来获取原始日期。
提前感谢
最佳答案
当你将日期(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日或更早,则您的“错误”日期实际上仍然正确。