Skip to content

Instantly share code, notes, and snippets.

@midnightfreddie
Created November 8, 2017 19:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save midnightfreddie/f6be6ec60b553c94e3d1f5afec274ffc to your computer and use it in GitHub Desktop.
Save midnightfreddie/f6be6ec60b553c94e3d1f5afec274ffc to your computer and use it in GitHub Desktop.
Returns a date object of the first weekday of the month following another weekday, e.g. first Monday after Friday. In reply to https://www.reddit.com/r/PowerShell/comments/7bda01/calculate_first_monday_after_first_friday_of/
function Compare-WeekDays {
# Return days between weekdays
param (
[Parameter(Mandatory=$true)]
[System.DayOfWeek]$Minuend,
[Parameter(Mandatory=$true)]
[System.DayOfWeek]$Subtrahend
)
# In case they change how many days are in a week :)
$DaysInWeek = [System.Enum]::GetNames('System.DayOfWeek').Count
[int]$Difference = $Minuend - $Subtrahend
if ($Difference -lt 0) { $Difference += $DaysInWeek }
Write-Output $Difference
}
function Get-FirstWeekDayAfterWeekDay {
param (
[int]$Year = (Get-Date).Year,
[int]$Month = (Get-Date).Month,
[System.DayOfWeek]$FirstWeekDay = [System.DayOfWeek]::Monday,
[System.DayOfWeek]$AfterWeekDay = [System.DayOfWeek]::Friday
)
$FirstWeekDayOfMonth = (Get-Date -Year $Year -Month $Month -Day 1).DayOfWeek
$DayOfMonth = 1 +
(Compare-WeekDays -Minuend $AfterWeekDay -Subtrahend $FirstWeekDayOfMonth) +
(Compare-WeekDays -Minuend $FirstWeekDay -Subtrahend $AfterWeekDay)
# if e.g. first Monday after Monday, need to add a week
if ($FirstWeekDay -eq $AfterWeekDay) { $DayOfMonth += [System.Enum]::GetNames('System.DayOfWeek').Count }
Write-Output (Get-Date -Year $Year -Month $Month -Day $DayOfMonth -Hour 0 -Minute 0 -Second 0 -Millisecond 0)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment