DateTime年份格式问题

时间:2014-05-23 06:05:46

标签: php datetime

我必须将现有网站的数据库导入我们制作的新网站。 存储在早期数据库中的dob字段会产生问题。 dob格式为mm / dd / yy或mm / dd / yyyy,而我们需要以Y-m-d格式保存。

我正在使用此代码,该代码适用于日期

$case_contact_dateval = '04/11/81';

并给我约会1981-04-11,这是正确的。而在

$case_contact_dataval = '03/22/67';
$date = DateTime::createFromFormat('m/d/y',$case_contact_dataval);
echo $date = $date->format('Y-m-d');

其他一些日期

 $case_contact_dataval = '03/22/67';
 $case_contact_dataval = '07/05/40';
 $case_contact_dataval = '01/25/59';
 $case_contact_dataval = '03/09/58';

我的日期是2067-03-22,这是错误的,因为所有这些日期都是出生日期。 我在ubuntu上使用php 5.4.6。 我有很多像这些日期相同的代码工作正常和一些错误。 无法获得解决方案......请提供建议。

2 个答案:

答案 0 :(得分:2)

DateTime将70岁以下的任何两位数年份视为21世纪。

您必须转换数据,而不是尝试创建日期。例如

$case_contact_dataval = '03/22/67';
$threshold = date('y'); // current two digit year
list($month, $day, $year) = sscanf($case_contact_dataval, '%d/%d/%d');
$date = sprintf('%02d%02d-%02d-%02d',
    $year > $threshold ? 19 : 20, $year, $month, $day);

在这里演示〜https://eval.in/155942

我甚至投入了一个更新的日期来向您展示它是如何处理的。

答案 1 :(得分:-2)

生日不可能在将来。如果生日>添加'19'当年

$case_contact_dateval = '04/11/67';
if (substr($case_contact_dateval, -2) > date('y')) {
    $case_contact_dateval = substr($case_contact_dateval, 0, -2) . '19' . substr($case_contact_dateval, -2);
}
$date = \DateTime::createFromFormat('m/d/Y', $case_contact_dateval);
echo $date->format('Y-m-d');