public static function formatDurationInMicroseconds()

in agent/php/ElasticApm/Impl/Util/TimeUtil.php [106:180]


    public static function formatDurationInMicroseconds(float $durationInMicroseconds): string
    {
        if ($durationInMicroseconds === 0.0) {
            return '0us';
        }

        $isNegative = ($durationInMicroseconds < 0);
        $microsecondsTotalFloat = abs($durationInMicroseconds);
        $microsecondsTotalWhole = floor($microsecondsTotalFloat);
        $microsecondsFraction = $microsecondsTotalFloat - $microsecondsTotalWhole;

        $millisecondsTotalWhole = 0.0;
        $microsecondsRemainder = 0.0;
        self::calcWholeTimesAndRemainderForFloat(
            $microsecondsTotalWhole,
            TimeUtil::NUMBER_OF_MICROSECONDS_IN_MILLISECOND,
            /* ref */ $millisecondsTotalWhole,
            /* ref */ $microsecondsRemainder
        );

        $secondsTotalWhole = 0.0;
        $millisecondsRemainder = 0.0;
        self::calcWholeTimesAndRemainderForFloat(
            $millisecondsTotalWhole,
            TimeUtil::NUMBER_OF_MILLISECONDS_IN_SECOND,
            /* ref */ $secondsTotalWhole,
            /* ref */ $millisecondsRemainder
        );

        $minutesTotalWhole = 0.0;
        $secondsRemainder = 0.0;
        self::calcWholeTimesAndRemainderForFloat(
            $secondsTotalWhole,
            TimeUtil::NUMBER_OF_SECONDS_IN_MINUTE,
            /* ref */ $minutesTotalWhole,
            /* ref */ $secondsRemainder
        );

        $hoursTotalWhole = 0.0;
        $minutesRemainder = 0.0;
        self::calcWholeTimesAndRemainderForFloat(
            $minutesTotalWhole,
            TimeUtil::NUMBER_OF_MINUTES_IN_HOUR,
            /* ref */ $hoursTotalWhole,
            /* ref */ $minutesRemainder
        );

        $hoursRemainder = 0.0;
        $daysTotalWhole = 0.0;
        self::calcWholeTimesAndRemainderForFloat(
            $hoursTotalWhole,
            TimeUtil::NUMBER_OF_HOURS_IN_DAY,
            /* ref */ $daysTotalWhole,
            /* ref */ $hoursRemainder
        );

        $appendRemainder = function (string $appendTo, float $remainder, string $units): string {
            if ($remainder === 0.0) {
                return $appendTo;
            }

            $remainderAsString = ($remainder === floor($remainder)) ? strval(intval($remainder)) : strval($remainder);
            return $appendTo . (TextUtil::isEmptyString($appendTo) ? '' : ' ') . $remainderAsString . $units;
        };

        $result = '';
        $result = $appendRemainder($result, $daysTotalWhole, 'd');
        $result = $appendRemainder($result, $hoursRemainder, 'h');
        $result = $appendRemainder($result, $minutesRemainder, 'm');
        $result = $appendRemainder($result, $secondsRemainder, 's');
        $result = $appendRemainder($result, $millisecondsRemainder, 'ms');
        $result = $appendRemainder($result, $microsecondsRemainder + $microsecondsFraction, 'us');

        return ($isNegative ? '-' : '') . $result;
    }