5

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

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

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

例如:

 14 april.

 I want to get:28 february 2013

这怎么可能?我也想以 yyyymmdd 格式获取日期

更新日期:

您的解决方案是否可能不适用于年份的变化?

如果我在一月份,$(get-date).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")
4

2 回答 2

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来获取传递给它的月份中的日期。它的文档在这里。它接受两个参数作为输入,月份为整数,年份也为整数。

在我们的例子中,我们想要这个月之前的 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"
于 2013-04-30T20:18:32.493 回答
3
$(Get-Date).addDays(-$(Get-Date).Day).addMonths(-1).ToString("yyyyMMdd")
于 2014-06-17T22:13:34.500 回答