2013-04-30 95 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") 
相关问题