Гибкая функция для вывода количества лет лет прошедших между датами, если вторая дата отсутствует, то возвращает количество лет между датой и сегодня

                        
function getAge() {
$f = Array(chr(89),chr(109),chr(100)); $v = func_get_args();
$ic = 1; $im = 0; $ns = !is_string($v[0]) && !is_string($v[1]);
if($ns) $c = array_slice($v, 3, 5);
elseif(count($v)-1) $c = explode(chr(46),$v[1]);
else $c = Array(0,0,0); $ic = count($c);
if($ic) for ($i=0; $i<3; $i++) $ic = $ic && $c[$i];
if($ns) $u = array_slice($v, 0, 3);
else $u = explode(chr(46),$v[0]);
if (!$ic) for($i=0; $i<3; $i++) $c[$i] = date($f[$i]);
else for($i=0; $i<3; $i++) $im = $u[$i] - $c[$i] + $im;
if($im>0) return 0; // если первая часть больше второй
if($u[1] > $c[1] || $u[1] == $c[1] && $u[2] > $c[2]) return $c[0] - $u[0] - 1;
return $c[0] - $u[0];
}

print getAge(1992,3,4). PHP_EOL; // сколько лет сейчас
print getAge(1992,3,4,2000,3,4). PHP_EOL; // сколько лет было в 2000.03.04
print getAge(1992,3,4,2090,3,4). PHP_EOL; // сколько будет лет в 2090.03.04
print getAge(2090,3,4,1992,3,4). PHP_EOL; // ошибка, первая часть больше второй
print getAge('1992.3.4','2000.3.4'). PHP_EOL; // текстовый формат
print getAge('1992.03.04','2000.03.04'). PHP_EOL; // текстовый формат с поддержкой 0
-2 51 0
0

Нет фото
Komis * 0.01
• 14 сен 2023, 15:35


Pretty cool code

0

Нет фото
SV * 2.63
• 19 окт 2020, 03:54


DateTime::diff ? Не, не слышал!
Тебя за такое по рукам не били?

0

Нет фото
RGame * 3.65
• 8 сен 2018, 20:41


Говнокодище. Жесть