Finding the Last Friday (or any weekday) of the Month in PowerShell

If there are less than 7 days left in the month, then it’s the last weekday of this type in this month.

function Is-LastWeekDayOfMonth([DateTime] $d) {
    return [DateTime]::DaysInMonth($d.Year, $d.Month) - $d.Day -lt 7
}

Similarly, finding the last specific weekday of the month involves finding the last weekday, and the difference between that weekday and the target weekday:

function Get-LastFridayOfMonth([DateTime] $d) {    
    $lastDay = new-object DateTime($d.Year, $d.Month, [DateTime]::DaysInMonth($d.Year, $d.Month))
    $diff = ([int] [DayOfWeek]::Friday) - ([int] $lastDay.DayOfWeek)

    if ($diff -ge 0) {
        return $lastDay.AddDays(- (7-$diff))
    }
    else {
        return $lastDay.AddDays($diff)
    }    
}

One Reply to “Finding the Last Friday (or any weekday) of the Month in PowerShell”

  1. Hi Chinh Do,
    I stumbled upon your script today.
    I was looking for something like this.
    There is just one minor thing about your script.
    In your If statement, you should use -gt in stead of -ge to return the correct value.

    Much appreciated!
    Martijn

Leave a Reply

Your email address will not be published. Required fields are marked *