Guten Tag, Powershell-Liebhaber.
Ich liebe ihn und heute habe ich eine Kuriosität bemerkt, die mich motiviert hat, diesen Beitrag zu schreiben. Ich denke, Sie werden auch interessiert sein. Der Fall von überschüssiger Zecke. Bei Interesse herzlich willkommen bei cat:
Was ist das Wesen der Fremdheit?
In einer Verarbeitung wurde zur Vereinfachung der Auswahl die Anzahl der Tage bis zum Monatsende benötigt.
Dies wurde in einer Zeile dieser Art berechnet:
((Get-date -Day 1).AddMonths(1)-(get-date)).days-1
Charakteristisch ist, dass die Berechnung zu unterschiedlichen Ergebnissen führen kann:

Zuerst dachte ich, dass etwas mit dem Code oder der Powershell-Version nicht stimmt.
Ich habe es an mehreren Autos überprüft und festgestellt, dass die Situation reproduzierbar ist.
Deshalb habe ich mich hingesetzt, um zu debütieren und eine Funktion zu schreiben.
Ich habe das bekommen, die Kommentare gehen sofort zum Code:
Function Get-DaysToEndOfMonths([int]$Month=1) {If($Month -lt 1){[int]$Month = 1} $CurrentDate = get-date
Nun, nachdem ich geschrieben hatte, setzte ich mich zum Nachdenken hin und kam zu dieser Zeile:
[int]((((Get-Date -day 01).AddMonths(1)).AddDays(-1)).Day-(Get-date).Day)
Sie hat keinen Fehler gemacht, aber vielleicht, weil:
Es stellt sich heraus, dass wir die Stunde \ Minute \ Sekunde oder vielmehr die Prozessortakt-Ticks nicht berücksichtigen.
Beachten Sie, dass Get-date einen Wert in Millisekunden zurückgibt.
Wenn jedoch bei der Durchführung der Berechnungen der erste und der zweite Get-Date-Aufruf auf einen Tick fielen, gibt es folgende Werte:
(Get-date -day 1).AddMonth(1) = 1.12.2019 15:33:00:500 Get-date = 1.11.2019 15:33:00:500
Subtrahieren und 30 00: 00: 00: 000 erhalten
Wenn der Aufruf des zweiten Get-Datums jedoch auf das nächste Häkchen fällt, ist sein Wert
=>
1.11.2019 15:33:00:501
Und dann bekommen wir den Wert in
29 23:59:59:999
Nachdem das Problem gefunden wurde, können wir Folgendes tun:
Und wir werden immer die gleiche Bedeutung haben.
Sei vorsichtig und wünsche dir ein schönes Wochenende!