Private/Resolve-WildcardDateRange.ps1

function Resolve-WildcardDateRange {
    <#
    .SYNOPSIS
        Resolves wildcard date patterns to concrete date ranges relative to a reference date.
    #>

    [CmdletBinding()]
    [OutputType([PSCustomObject[]])]
    param(
        [Parameter(Mandatory = $true)]
        [string]$StartPattern,

        [Parameter(Mandatory = $true)]
        [string]$EndPattern,

        [Parameter(Mandatory = $true)]
        [datetime]$ReferenceDate
    )

    $results = @()
    $refYear = $ReferenceDate.Year

    # Try resolving for current year, previous year, and next year
    foreach ($yearOffset in @(-1, 0, 1)) {
        $tryYear = $refYear + $yearOffset
        $yearStr = $tryYear.ToString('D4')

        $resolvedStart = Resolve-WildcardDate -Pattern $StartPattern -YearDigits $yearStr
        $resolvedEnd = Resolve-WildcardDate -Pattern $EndPattern -YearDigits $yearStr

        if (-not $resolvedStart -or -not $resolvedEnd) { continue }

        # Handle cross-year ranges (Dec start -> Jan end)
        if ($resolvedEnd -lt $resolvedStart) {
            # Try end date with next year
            $nextYearStr = ($tryYear + 1).ToString('D4')
            $resolvedEnd = Resolve-WildcardDate -Pattern $EndPattern -YearDigits $nextYearStr
            if (-not $resolvedEnd) { continue }
        }

        if ($resolvedEnd -lt $resolvedStart) { continue }

        # Only include ranges that overlap with a reasonable window around reference date
        # (exclude ranges entirely more than 1 year in the past or future)
        $windowStart = $ReferenceDate.AddYears(-1)
        $windowEnd = $ReferenceDate.AddYears(1)
        if ($resolvedEnd -ge $windowStart -and $resolvedStart -le $windowEnd) {
            # Avoid duplicates
            $isDuplicate = $false
            foreach ($existing in $results) {
                if ($existing.StartDate -eq $resolvedStart -and $existing.EndDate -eq $resolvedEnd) {
                    $isDuplicate = $true
                    break
                }
            }
            if (-not $isDuplicate) {
                $results += [PSCustomObject]@{
                    StartDate = $resolvedStart
                    EndDate   = $resolvedEnd
                }
            }
        }
    }

    return $results
}