Powershell如何获得2个月前的最后一天

时间:2013-04-30 20:02:40

标签: date powershell getdate

我每个月的第4天和第14天安排一个脚本。

当脚本从第4个开始时,我需要获取上个月的最后一天(简单,$ a.AddDays(-5))

当脚本在14日开始时,我需要在2个月之前的最后一天。

例如:

 14 april.

 I want to get:28 february 2013

怎么可能? 我也希望以格式yyyymmdd

获取日期

UDPDATE:

您的解决方案是否可能无法适应当年的变化?

如果我在1月,$(获取日期).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")

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分:3)

$(Get-Date).addDays(-$(Get-Date).Day).addMonths(-1).ToString("yyyyMMdd")