PowerShell возвращает 2 как номер недели 6 января 2020 года - PullRequest
2 голосов
/ 06 января 2020

Быстрый вопрос, по-видимому, сегодня (06 января 2020 г.) Номер недели должен быть 2, потому что в 2020 г. 53 недели.

Однако следующий фрагмент PowerShell возвращает 1:

(Get-Date -UFormat %V)

Каков правильный подход к правильному получению номера недели?

Ответы [ 2 ]

3 голосов
/ 06 января 2020

Чтобы перевести это Получите правильный номер недели для указанной даты C# ответ от @ il_guru в PowerShell :

Function GetIso8601WeekOfYear([DateTime]$Date) {
    $Day = (Get-Culture).Calendar.GetDayOfWeek($Date)
    if ($Day -ge [DayOfWeek]::Monday -and $Day -le [DayOfWeek]::Wednesday) {$Date = $Date.AddDays(3)}
    (Get-Culture).Calendar.GetWeekOfYear($Date, 'FirstFourDayWeek', 'Monday')
}
GetIso8601WeekOfYear (Get-Date)
2
GetIso8601WeekOfYear (Get-Date('2016-01-01'))
53
1 голос
/ 06 января 2020

Вы можете определить високосный год, а затем настроить номер недели на основе результата.

if(((Get-Date).year)%4 -eq 0){
    $week = (Get-Date -UFormat %V) -as [int]
    $week++
}else{
    $week = (Get-Date -UFormat %V)
}
Write-Host $week
...