PHP从1970年的个人身份号码中获取时间

时间:2015-04-17 13:13:49

标签: php date date-conversion

我有问题,我无法从1970年的个人身份号码中抽出时间,我需要解决这个问题,但需要时间。我的功能看起来像。我不知道我能走哪条路。谢谢!

    function getBirthDayFromRd($rd){

$day = substr($rd,4,2);
$month = substr($rd, 2,2);
$year = substr($rd, 0,2);

if($month>=51 and $month<=62){ 
$month = $month - 50;
    }

$time = strtotime($day.".".$month.".".$year);

return date("d.m.Y", $time);


}

2 个答案:

答案 0 :(得分:3)

strtotime()失败,因为它与不支持1970年之前的日期的Unix时代联系在一起。只需使用DateTime,它可以处理1970年以前的日期并轻松转换日期:

function getBirthDayFromRd($rd){
    $date = DateTime::createFromFormat('ymd',$rd);
    if($date->format('Y') > date("Y")) {
         $date->modify('-100 years');
    }
    return $date->format('d.m.Y');
}

DateTime::createFromFormat()解析您的日期并创建DateTime对象。然后我们只需调用DateTime::format()以所需格式对其进行格式化。

更新

修复了一个错误,其中1970年以前的日期显示在未来100年。

Demo

答案 1 :(得分:0)

我用另一种方式解决了,但你开始了我。

if($year < 70){
        $year = $year+1900;
        $time = date_create_from_format("d.m.Y", $day.".".$month.".".$year);
        return date_format($time, "d.m.Y");
    }else{

$time = strtotime($day.".".$month.".".$year);

return date("d.m.Y", $time);
}