我需要一個PowerShell功能來爲當前日期添加23個月,但將當天設置爲第一天。我嘗試了一個while循環來減去日子,但沒有運氣。我有一個月的部分想通了,但我需要到$ current.day設置爲常數1Powershell日期功能問題
function Update-Date {
$current = Get-Date
$current.AddMonths(11)
$current.AddYears(1)
$current.Day(1)
}
我需要一個PowerShell功能來爲當前日期添加23個月,但將當天設置爲第一天。我嘗試了一個while循環來減去日子,但沒有運氣。我有一個月的部分想通了,但我需要到$ current.day設置爲常數1Powershell日期功能問題
function Update-Date {
$current = Get-Date
$current.AddMonths(11)
$current.AddYears(1)
$current.Day(1)
}
有更好,更簡潔的方式來做到這一點(見mklement0的答案),但作爲一個學習的機會,試試這個:
$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
}
注意,AddMonths,AddYears,AddDays等不修改原來的日期,而是返回一個新的。您需要每次存儲它,然後執行下一個操作。您可以減去當月的當天,然後加1回到月份的第一天,而不是循環。我添加了一個return語句和代碼將其輸出到屏幕,如果不需要,您可以忽略它。
的Get-Date
cmdlet可以通過其-Day
,-Month
和-Year
調整指定日期(的副本)組件參數(和類似的時間部分),所以嘗試以下方法:
Get-Date -Day 1 (Get-Date).Date.AddMonths(23)
注使用.Date
,其去除從日期時間的日部分。
在你的函數包裹(改名的一致性使用PowerShell的命名約定;注意功能輸出結果日期):
function Get-UpdateDate { Get-Date -Day 1 (Get-Date).Date.AddMonths(23) }
這是關於'[System.DateTime]'的好信息,但我建議不要使用'Write-Host'(只需使用'$ val'輸出到_success_流 - 而不是直接寫入主機(終端) )和'return'(同樣,只需使用'$ current'輸出值),這樣就不會變成PowerShell反學習機會。 – mklement0
好吧,從技術上來說,做'return $ current'並沒有什麼問題,它只是不是真的很強大。 – 4c74356b41
@ 4c74356b41:這不是「powershellish」恰恰是我的觀點:使用'Write-Host'也沒有什麼_technically_ wrong,但是使用它可能是基於對PowerShell中的輸出如何工作的誤解 - 就像使用「return」一樣,儘管它的使用是良性的。正如目前所寫,代碼加強了對PowerShell的常見誤解。 – mklement0