Powershell获得本月的第n天

时间:2016-09-19 15:30:16

标签: date powershell

我有这个脚本,我在互联网上找到计算每个月的第三个星期二 - 但我需要修改它只是给我一个月的第7天,同样但加上任何天数)。

            $FindNthDay=3
            $WeekDay='Tuesday'
            [datetime]$Today=[datetime]::NOW
            $todayM=$Today.Month.ToString()
            $todayY=$Today.Year.ToString()
            [datetime]$StrtMonth=$todayM+'/7/'+$todayY
            while ($StrtMonth.DayofWeek -ine $WeekDay ) { $StrtMonth=$StrtMonth.AddDays(1) }
            $StrtMonth.AddDays(7*($FindNthDay-1))
            $NextUpdate = $StrtMonth.AddDays(7*($FindNthDay-1))

我不理解这里的逻辑,我想我不需要$ Weekday。有任何想法吗?我想尽可能保留类似的结构和变量名称,以使其与其他脚本保持一致。

由于

4 个答案:

答案 0 :(得分:2)

这实际上并不太糟糕。

首先,让我们在变量中存储指向今天日期的指针,让它称之为$ date。

$date = Get-Date

接下来,我们需要弄清楚月份的数字日期(就像它的数字部分一样)。我们可以使用$date.Day

来实现
$date.day
  

19

现在,让我们使用.AddDays()方法从日期中减去今天的日期,为我们指定一个月中的第一个。

$date.AddDays(-($date.Day-1))
>Thursday, September 1, 2016 11:46:36 AM

最后,我们可以将另一个.AddDays()链接到此长字符串的末尾,以添加您想要的天数。在您的情况下,您希望找到该月的第七天。我们再增加六天就可以做到这一点。

$date.AddDays(-($date.Day-1)).AddDays(6)
>Wednesday, September 7, 2016 11:48:15 AM

答案 1 :(得分:1)

Get-Date接受-Day参数,其值将用作日期中的日期:

PS> Get-Date -Day 7

Wednesday, September 07, 2016 17:47:36

或者,如果你想要午夜:

PS> Get-Date '00:00:00' -Day 7

Wednesday, September 07, 2016 00:00:00

(即使你无法在上面的输出中看到它,也会将小数秒设置为0.)

如果你超过月底而不超过31天就会出现某种奇怪的行为。例如,9月只有30天,如果你传入31:

,这就是结果
PS> Get-Date -Month 9 -Day 31

Saturday, October 01, 2016 17:53:31

(上面的-Month 9只是为了让结果对将来的复制/粘贴的当前时间不敏感。)

因此,您可能希望验证输出月份与当前月份匹配:

PS> (Get-Date -Month 9 -Day 31).Month -eq (Get-Date -Month 9).Month
False

如果传入32或更高,则会导致错误:

PS> Get-Date -Day 32
Get-Date : Cannot validate argument on parameter 'Day'. The 32 argument is greater than the maximum allowed range of 31. Supply an argument that is less than or equal to 31 and then try the command again.

答案 2 :(得分:0)

今天

get-date
Wednesday, April 25, 2018 5:23:34 PM

当月第7天(使用当前时间)

get-date -day 7
Saturday, April 07, 2018 5:24:15 PM

只是日期(午夜)

(get-date -day 7).date
Saturday, April 07, 2018 12:00:00 AM

使用“.adddays(3)”

添加天数
(get-date -day 7).date.adddays(3)
Tuesday, April 10, 2018 12:00:00 AM

完全控制日期

(Get-Date -Year 2018 -Month 4 -Day 7).Date
Saturday, April 07, 2018 12:00:00 AM

数字可以是变量

$yr=2018
$mn=4
$dy=7
(Get-Date -Year $yr -Month $mn -Day $dy).Date
Saturday, April 07, 2018 12:00:00 AM

答案 3 :(得分:0)

这不是问题的答案,但我的搜索将我带到了这里,希望有人能对此有用。

这将告诉您今天的哪一天(该月的第一个星期五,该月的第二个星期一,等等)。它只会返回一个整数。

Function Get-nthDayOfMonth {
    $WorkingDay = (Get-Date).day
    [int]$WeekCount = 1
    $WeekFound = $false

    While($WeekFound -eq $false){
        $WorkingDay = $WorkingDay - 7

        if ($WorkingDay -le 0){
            $WeekFound = $true
        }
        else{
            $WeekCount++
        }
    }

    return $WeekCount
}