2013-04-30 166 views
3

我已經安排了一個腳本,每個月的第4天和第14天。Powershell如何得到2個月前的最後一天

當腳本啓動4日,我需要得到前一個月的最後一天(易,$ a.AddDays(-5))

腳本時,14日開始,我需要得到的最後一天2個月前。

例如:

14 april. 

I want to get:28 february 2013 

怎麼可能? 我也想在yyyymmdd格式的日期

UDPDATE:

有沒有可能是你的解決方案不會與去年的變化很好地工作?

,如果我在一月份我,$(獲取最新).month -1結果爲0,所以我這樣做:

$datenow = Get-date 
if $datenow.day -eq 14 
$datenow.AddDays(-14) 

然後我計算

$LastDayInMonth = [System.DateTime]::DaysInMonth($(Get-date).Year, $(Get-date.Month)) 
$datenow.AddDays(-$LastDayInMonth) 
$datestring = $datenow.ToString("yyyyMMdd") 

回答

6

爲了獲取日期在一個字符串:

$(get-date).Date.ToString("yyyyMMdd") 

爲了得到兩個月前的最後一天:

if($(get-date).Day -eq 14){ 
    $LastDayInMonth = [System.DateTime]::DaysInMonth($(get-date).Year, $($(get-date).Month - 2)) 

} 

更新

$LastDayInMonth = [System.DateTime]::DaysInMonth($(get-date).Year, $($(get-date).Month - 2)) 

使用在的System.DateTime類的靜態方法DaysInMonth得到天傳遞給它的月月。它的文檔是here。它將兩個參數作爲輸入,月份作爲整數,年份也作爲整數。

就我們而言,我們這個月前2個月想,所以當月參數我們傳遞了

$(get-date).month - 2 

,這是在一個括號包圍,以確保PowerShell將計算然後通計算的結果。 get-date是一個powershell cmdlet,它將當前日期和時間作爲.NET dateTime對象提供,因此我們擁有所有屬性和方法。

整個

[System.DateTime]::DaysInMonth() 

是調用PowerShell中的靜態方法現在的樣子。


更新2

一旦你獲得了最後一天的月份,您可以連接由字符串:

$LastDayInMonthString = "$($(get-date).AddMonths(-2).ToString("yyyyMM"))$LastDayInMonth" 
+0

你能解釋一下這條線? – rschirin 2013-04-30 20:31:31

+0

@rschirin絕對,看我的更新。 – MDMoore313 2013-04-30 20:55:43

+0

非常感謝你。我之前沒有使用[system.datetime]。 – rschirin 2013-04-30 21:58:56

2
$(Get-Date).addDays(-$(Get-Date).Day).addMonths(-1).ToString("yyyyMMdd") 
相關問題