Public/Get-BcTechDaysSchedule.ps1

function Get-BcTechDaysSchedule
{
    $EnglishCulture = [cultureinfo]'en-US';
    $BrusselsTimeZone = [System.TimeZoneInfo]::FindSystemTimeZoneById('Europe/Brussels')

    $Property = [Ordered]@{
        DateTime    = 'h5.modal-title'
        Title       = 'h2.text-color-secondary'
        Speakers    = 'h2.accordion-header button'
        Tags        = 'span.tag'
        Description = '.pt-3 p'
    }

    ConvertTo-HtmlDocument -Uri https://bctechdays.com/event
    | Select-HtmlNode -CssSelector '.modal[aria-labelledby^="event-detail-"] .modal-content' -All
    | Convert-HtmlNode -Property $Property -TypeName 'UncommonSense.BcTechDays.ScheduledEvent' -Mode CssSelector -Separator '***'
    | Where-Object DateTime -Like '*Jun*'
    # | Where-Object { $_.Tags -notlike 'Workshop*' }
    | Where-Object Title -NotMatch '^\w{3}\s\d+$'
    | ForEach-Object {
        $Date = [DateTime]::ParseExact($_.DateTime.SubString(0, 11), 'ddd dd\, MMM', $EnglishCulture)
        $StartTimeText = $_.DateTime.SubString(12, 5)
        $StartTime = [DateTime]::ParseExact($StartTimeText, 'HH:mm', $EnglishCulture).TimeOfDay
        $EndTimeText = $_.DateTime.SubString(20, 5)
        $EndTime = [DateTime]::ParseExact($EndTimeText, 'HH:mm', $EnglishCulture).TimeOfDay
        $Tags = $_.Tags -split '\*\*\*'

        [PSCustomObject]@{
            RawDateTime = $_.DateTime
            StartDate   = ([TimeZoneInfo]::ConvertTimeToUtc($Date.Add($StartTime), $BrusselsTimeZone))
            EndDate     = ([TimeZoneInfo]::ConvertTimeToUtc($Date.Add($EndTime), $BrusselsTimeZone))
            Title       = $_.Title
            RawTags     = $Tags
            Type        = $Tags | Where-Object { $_ -in 'Session', 'Workshop', 'Presentation' }
            Duration    = $Tags | Where-Object { $_ -match '\d+\smin' }
            Location    = $Tags | Where-Object { $_ -Match '^Room\s\d+$' -or $_ -eq 'Conference Hotel' -or $_ -eq 'Expo Area' -or $_ -eq 'Presentations Area' }
            Level       = $Tags | Where-Object { $_ -match '^LEVEL' } | ForEach-Object { $_ -replace '^LEVEL:\s', '' }
            Speakers    = $_.Speakers -split '\*\*\*' -join ', '
            Description = $_.Description -split '\*\*\*' -join "`n"
        }
    }
}