date — PHP получает время от личного идентификационного номера до 1970

У меня есть проблема, я не могу получить время от личного идентификационного номера до 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);}

1

Решение

strtotime() не удается из-за того, что он привязан к эпохе Unix, которая не поддерживает даты до 1970 года. Просто используйте 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 лет.

демонстрация

3

Другие решения

Я решаю это по-другому, но ты меня запустил.

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector