Anfang und Ende eines Monats in der PowerShell

Im letzten Blogeintrag haben wir uns die Ticks angeschaut und die möglichen Formatierungen.

In diesem Blogeintrag schauen wir uns an, wie man einen ganzen Monat zeitlich erfassen kann. Vom ersten Tag dieses Monats 0:00 Uhr bis zum letzten Tag des Monats 23:59 Uhr.

Um zu sehen, welche Parameter der Get-Date Befehl beinhaltet, kann ich folgendes aufrufen:

[PS] Get-Help Get-Date

NAME Get-Date

ÜBERSICHT    Gets the current date and time.

SYNTAX

    Get-Date [[-Date] <DateTime>] [-Day <Int32>] [-DisplayHint {Date | Time | DateTime}] [-Format <String>] [-Hour <Int32>]   [-Millisecond <Int32>] [-Minute <Int32>] [-Month <Int32>] [-Second <Int32>] [-Year <Int32>] [<CommonParameters>]

[PS] C:\>Get-Help Get-Date
NAME Get-Date
ÜBERSICHT    Gets the current date and time.
SYNTAX
    Get-Date [[-Date] <DateTime>] [-Day <Int32>] [-DisplayHint {Date | Time | DateTime}] [-Format <String>] [-Hour <Int32>]
   [-Millisecond <Int32>] [-Minute <Int32>] [-Month <Int32>] [-Second <Int32>] [-Year <Int32>] [<CommonParameters>]

Wir sehen, mit –Day, -Hour, -Minute und –Second kann ich eine feste Zeit definieren.

Das heißt der Beginn des Monats wäre:

PS C:\> $ersterTag = Get-Date -Day 1 -Hour 0 -Minute 0 -Second 0

PS C:\> $ersterTag

Donnerstag, 1. Juni 2017 00:00:00

PS C:\> $ersterTag = Get-Date -Day 1 -Hour 0 -Minute 0 -Second 0
PS C:\> $ersterTag
Donnerstag, 1. Juni 2017 00:00:00

Im Blogeintrag “Die Uhrzeit” haben wir gesehen, dass ich mit dem Datum rechnen kann. Das heißt, um das Monatsende zu berechnen zähle ich einfach zu dem vorherigen Ergebnis einen Monat dazu und ziehe eine Sekunde ab:

PS C:\> $letzterTag = ($ersterTag).AddMonths(1).AddSeconds(-1)

PS C:\> $letzterTag

 Freitag, 30. Juni 2017 23:59:59

PS C:\> $letzterTag = ($ersterTag).AddMonths(1).AddSeconds(-1)
PS C:\> $letzterTag
Freitag, 30. Juni 2017 23:59:59

Wenn ich den Anfang und Ende des letzten Monats berechnen will, dann muss ich einfach beim Startwert einen Monat abziehen:

PS C:\> $ersterTag = (Get-Date -Day 1 -Hour 0 -Minute 0 -Second 0).addmonths(-1)

PS C:\> $ersterTag

Montag, 1. Mai 2017 00:00:00

 PS C:\> $letzterTag = ($ersterTag).AddMonths(1).AddSeconds(-1)

PS C:\> $letzterTag

Mittwoch, 31. Mai 2017 23:59:59

PS C:\> $ersterTag = (Get-Date -Day 1 -Hour 0 -Minute 0 -Second 0).addmonths(-1)

PS C:\> $ersterTag

Montag, 1. Mai 2017 00:00:00

 
PS C:\> $letzterTag = ($ersterTag).AddMonths(1).AddSeconds(-1)

PS C:\> $letzterTag

Mittwoch, 31. Mai 2017 23:59:59

 

Schön formatieren kann man das ganze wieder mit der ToString-Methode. So würde zum Beispiel eine Konsolenausgabe aussehen:

Write-Host “Der aktuelle Monat: Von $($ersterTag.toString(“dd.MM.yyyy HH.mm”)) bis $($letzterTag.toString(“dd.MM.yyyy HH.mm”))“

Der aktuelle Monat: Von 01.05.2017 00.00 bis 31.05.2017 23.59

PS C:\> Write-Host “Der aktuelle Monat: Von $($ersterTag.toString(“dd.MM.yyyy HH.mm”)) bis $($letzterTag.toString(“dd.MM.yyyy HH.mm”))“
Der aktuelle Monat: Von 01.05.2017 00.00 bis 31.05.2017 23.59

 

Im nächsten Blogeintrag werden wir rechnen und runden.

Was denken Sie?

Pflichtfelder sind mit einem * markiert.