<?php

function getAngle($hours, $minutes) {
    // 5 - столько минут проходит часовая стрелка за час
    $hoursArrowPosition = normalizeHour($hours) * 5 + getHourArrowShift($minutes);
    $degsInMinute = 360 / 60;

    return abs($degsInMinute * ($minutes - $hoursArrowPosition));
}

function normalizeHour($hour) {
    return ($hour > 11)
        ? $hour - 12
        : $hour;
}

// На сколько минут сдвинулась часовая стрелка
// Например для 12:30 часовая стрелка сдвинется на 2,5 минуты
function getHourArrowShift($minutes) {
    $minutesInHour = 60;
    return ($minutes / $minutesInHour) * 5;
}

$testcases = [
    // час, минута, ожидаемый угол
    [12, 0, 0],
    [15, 20, 20],
    [3, 20, 20],
    [12, 30, 165],
    [10, 50, 25],
];

foreach ($testcases as list($hours, $minutes, $expectedAngle)) {
    $givenAngle = getAngle($hours, $minutes);
    echo "Время: {$hours}:{$minutes} ожидаемый угол: {$expectedAngle} дано: {$givenAngle}\n";
}

