使用PowerShell获取上个月的工作周

时间:2016-10-25 14:24:13

标签: powershell

我试图使用PowerShell在一个月内完成最后一个工作周。现在,我的代码没有用。当它应该返回时,我得到5分。工作周是周一至周五这是我到目前为止的代码:

$d = Get-Date  ; [math]::Ceiling(($d.Day+(($d.AddDays(-($d.Day-1))).DayOfWeek.value__)-7)/7+1)
if ($d -eq 5)  { $d -=1 }

我可以改进或改变哪些方法来完成这项工作?我使用的是powershell 5.

2 个答案:

答案 0 :(得分:1)

在不理解您的[math]公式及其含义的情况下,下一个代码段今天显示4(2016-10-25):

$d = Get-Date
$e = [math]::Ceiling(($d.Day+(($d.AddDays(-($d.Day-1))).DayOfWeek.value__)-7)/7+1)
if ($e -eq 5)  { $e -=1 }
$e

在您的代码段中,$d.GetTypeCode()始终为DateTime。换句话说,$d -eq 5始终会导致 false

答案 1 :(得分:0)

如果你达到一个月的最后一个星期一,这应该有效

$d = Get-Date "2016-1-01"
$LastDayinMonth = (Get-Date "$($d.year)/$($d.month+1)/1").addDays(-1)
$Offset=[int](($LastDayinMonth.dayofweek -1)* -1)
If ($Offset -eq 1) {$Offset=-6}
$LastMonday=$LastDayinMonth.addDays($Offset)

"d             : {0}" -f $d.tostring("D")
"LastDayinMonth: {0}" -f $LastDayinMonth.tostring("D")
"LastMonday    : {0}" -f $LastMonday.tostring("D")

HTH