我试图使用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.
答案 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