2016-10-25 2 views
0

Я пытаюсь получить последнюю рабочую неделю в месяц с помощью powershell. Сейчас мой код не работает. Я получаю 5, когда он должен вернуться 4. рабочая неделя пн-пт Вот мой код до сих пор:Получить последнюю рабочую неделю месяца с powershell

$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

Привет Matt вы должны объяснить, какой результат вы ожидаете сказать, за этот месяц, диапазон дат, начинающуюся с понедельника? – LotPings

ответ

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.

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

Смежные вопросы