Private/Format-PatDuration.ps1

function Format-PatDuration {
    <#
    .SYNOPSIS
        Formats a duration in milliseconds as a human-readable string.

    .DESCRIPTION
        Internal helper function that converts a duration in milliseconds to a human-readable
        string showing hours and minutes (e.g., "2h 16m") or just minutes for shorter durations.

    .PARAMETER Milliseconds
        The duration in milliseconds to format.

    .OUTPUTS
        System.String
        Returns a formatted string representing the duration (e.g., "2h 16m", "45m", "0m").
        Returns $null if input is $null or 0.

    .EXAMPLE
        Format-PatDuration -Milliseconds 8160000
        Returns: "2h 16m"

    .EXAMPLE
        Format-PatDuration -Milliseconds 2700000
        Returns: "45m"

    .EXAMPLE
        Format-PatDuration -Milliseconds 0
        Returns: $null

    .EXAMPLE
        8160000, 2700000, 5400000 | Format-PatDuration
        Returns: "2h 16m", "45m", "1h 30m"
    #>

    [CmdletBinding()]
    [OutputType([string])]
    param (
        [Parameter(Mandatory = $false, ValueFromPipeline = $true)]
        [AllowNull()]
        [long]
        $Milliseconds
    )

    process {
        if ($null -eq $Milliseconds -or $Milliseconds -eq 0) {
            return $null
        }

        $totalMinutes = [math]::Floor($Milliseconds / 60000)
        $hours = [math]::Floor($totalMinutes / 60)
        $minutes = $totalMinutes % 60

        if ($hours -gt 0) {
            return "${hours}h ${minutes}m"
        }
        else {
            return "${minutes}m"
        }
    }
}