2016-09-19 114 views
1

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

  $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。有任何想法吗?我希望尽可能保持类似的结构和变量名称,以便与其他脚本保持一致。

谢谢

+0

我想我回答了你的问题。我不明白你对这件作品的要求,所以如果你仍然需要,请在评论中扩展:'修改它只是给我一个月中的第七天,以及相同的天数,再加上任意天数' – FoxDeploy

回答

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 
+0

那简单!我期待尽可能多的编码,就像我拿原来的例子一样!谢谢,我可以从那里完成剩下的工作。 – JDGEEK

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天,则会出现某种奇怪的行为。例如九月只有30天,这是结果,如果你在31传:以上

PS> Get-Date -Month 9 -Day 31 

Saturday, October 01, 2016 17:53:31 

-Month 9就是如此的结果是不是当前的时间以备将来复制/ pasters敏感。 )

所以,你可能会想验证输出一个月匹配当前一个:

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. 
相关问题