2017-04-11 4 views
1

Ich brauche eine Powershell-Funktion, 23 Monate zum aktuellen Datum hinzufügen, aber den Tag auf den ersten Tag. Ich probierte eine Weile, um die Tage zu subtrahieren, hatte aber kein Glück. Ich habe den Monat Teil herausgefunden, aber ich brauche die $ current.day auf eine konstante 1.Powershell Datum Funktion Problem

function Update-Date { 
    $current = Get-Date 
    $current.AddMonths(11) 
    $current.AddYears(1) 
    $current.Day(1) 

} 

Antwort

1

Es gibt bessere und präzisere Möglichkeiten, es zu tun (mklement0 Antwort sehen), sondern als eine Gelegenheit zum Lernen, versuchen Sie dies:

$val = Update-Date 
Write-Host $val 

function Update-Date { 
    $current = Get-Date 
    $current = $current.AddMonths(11) 
    $current = $current.AddYears(1) 
    $current = $current.AddDays(-($current.Day) + 1) 
    return $current 
} 

Beachten Sie, dass die AddMonths, AddYears, AddDays usw. das ursprüngliche Datum nicht ändern, sondern einen neuen zurückzukehren. Sie müssen es jedes Mal speichern und dann die nächste Operation ausführen. Anstatt eine Schleife zu erstellen, können Sie einfach den aktuellen Tag des Monats subtrahieren und 1 zurückzählen, um ihn zum ersten des Monats zurück zu bekommen. Ich habe eine Return-Anweisung und einen Code hinzugefügt, um sie auf dem Bildschirm auszugeben, die Sie ignorieren können, wenn sie nicht benötigt werden.

+0

Das sind gute Informationen über '[System.DateTime]', aber ich schlage vor, weder 'Write-Host' zu verwenden (einfach' $ val' in den _success_stream zu schreiben - im Gegensatz zum Schreiben direkt auf den Host (Terminal)) noch 'return' (in ähnlicher Weise verwenden Sie einfach' $ current', um den Wert auszugeben), so dass dies nicht zu einer Anti-Learning-Gelegenheit für PowerShell wird. – mklement0

+0

Nun, technisch ist nichts falsch daran, 'return $ current' zu machen, es ist einfach nicht wirklich powershellish – 4c74356b41

+0

@ 4c74356b41: Dass es nicht" Powershellish "ist, ist genau mein Punkt: Es gibt auch nichts _technisch_ falsch mit' Write-Host' zu verwenden basiert wahrscheinlich auf einem Missverständnis darüber, wie die Ausgabe in PowerShell funktioniert - wie auch die Verwendung von 'return', obwohl die Verwendung gut ist. Wie bereits geschrieben, verstärkt der Code häufige Missverständnisse über PowerShell. – mklement0

5

Die Get-Date cmdlet einstellen kann über seine -Day, -Month und -Year Komponenten eines (Kopie eines) angegebenen Datum einstellen Parameter (und analog für den Zeitabschnitt), versuchen Sie so den folgenden:

Get-Date -Day 1 (Get-Date).Date.AddMonths(23) 

Beachten Sie die Verwendung von .Date, die den Zeit-of-day-Teil ab dem Zeitpunkt entfernt.

in Ihrer Funktion Wrapped (für Konsistenz mit Powershell-Namenskonventionen umbenannt, beachten Sie, dass die Funktion Ausgänge das resultierende Datum):

function Get-UpdateDate { Get-Date -Day 1 (Get-Date).Date.AddMonths(23) }