2015-04-17 29 views
1

我有問題,我無法從1970年的個人身份號碼獲得時間,我需要解決這個問題,但使用時間。我的功能看起來像。我不知道我可以走哪條路。謝謝!PHP從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); 


} 
+0

什麼是'$ rd'的有效值?你對這個函數有什麼輸出? –

+0

有效值是例如920610這將顯示10.06.1992,但如果它是690610它有錯誤的計數,因爲時間從1970年 – koca79331

回答

3

strtotime()失敗,因爲它被捆綁到不支持日期之前的1970年就使用的DateTime,它可以處理1970年之前的日期,很容易地轉換日期的Unix紀元:

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

+然而,值得一提的是'strtotime()'不能使用,因爲它基於[unix epoch](http://en.wikipedia.org/wiki/Unix_time)。 –

+0

非常感謝!我正在尋找這樣的想法。我會盡力給你代表。 – koca79331

+1

@JasonMcCreary好主意,做完了。 –

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); 
}