Получить начальный день недели, считая понедельник первым днем - PullRequest
0 голосов
/ 15 октября 2019

Я написал приведенный ниже код, чтобы получить начало и конец последней недели, считая понедельник днем ​​начала

$date_2 = ((Get-Date).adddays(-(6+(Get-Date -UFormat %u)))).date

Write-Host "From : $date_2"

$date_3 = $date_2.AddDays(6)

Write-Host "To : $date_3"

Работает нормально.

O/P
From : 10/07/2019 00:00:00
To : 10/13/2019 00:00:00 

Теперь нужно начатьдень недели, считая понедельник днем ​​начала. например, сегодня 15 октября, вторник, поэтому он должен дать

From : 10/14/2019 00:00:00
To : 10/15/2019 00:00:00

например, если это 18 октября, тогда это должно быть

From : 10/14/2019 00:00:00
To : 10/18/2019 00:00:00

Вам нужна помощь в этом.

Ответы [ 4 ]

3 голосов
/ 15 октября 2019

используется встроенное перечисление [DayOfWeek]. [ ухмылка ]

$Today = (Get-Date).Date

$Monday = $Today.AddDays(1 - $Today.DayOfWeek.value__)
$Sunday = $Monday.AddDays(6)

'Week starts {0}' -f $Monday
'Week ends   {0}' -f $Sunday

вывод ...

Week starts 2019-10-14 12:00:00 AM
Week ends   2019-10-20 12:00:00 AM
2 голосов
/ 15 октября 2019

Вы можете использовать следующую функцию, которая принимает текущую дату в качестве входных данных.
На основании этой даты и дня недели в виде INT он будет вычитать один день до понедельника.

function Get-WeekStartDate
{
    param
    (
        [System.DateTime]$Date
    )

    while ((Get-Date -Date $Date).DayOfWeek.value__ -ne 1)
    {
        $Date = $Date.AddDays(-1)
    }

    return $Date
}

Get-WeekStartDate -Date (Get-Date)
0 голосов
/ 15 октября 2019

Это должно быть то, что вы ищете (с общим количеством дней в месяце в качестве дополнительного бонуса).

# Get the current day
$date = Get-Date;

# determine the day, month, and year
$curDay = $date.DayOfWeek;
$curMonth = $date.Month;
$curYear = $date.Year;

# get total days in month
$totalDaysInMonth = [DateTime]::DaysInMonth($curYear, $curMonth);

switch($curDay){
    "Monday" {
        # this is where we want to be
        $offset = 0;
    }
    "Tuesday"{
        $offset = -1;
    }
    "Wednesday"{
        $offset = -2;
    }
    "Thursday"{
        $offset = -3;
    }
    "Friday"{
        $offset = -4;
    }
    "Saturday"{
        $offset = -5;
    }
    "Sunday"{
        $offset = -6;
    }
}

# Lets determine the start of the week
$startOfWeek = $date.AddDays($offset);
$endOfWeek = $startOfWeek.AddDays(6);

# lets show our findings
Write-Host "From: $startOfWeek";
Write-Host "To: $endOfWeek";
0 голосов
/ 15 октября 2019

Решение:

$monday = (Get-Date -Hour 0 -Minute 0 -Second 0).AddDays(-(Get-Date).DayOfWeek.value__ + 1)

Объяснение:

На основании моих проверок значение (Get-Date).DayOfWeek.value__ (числовое значение DayofWeek свойство - источник )0 для воскресенья, 1 для понедельника и т. д. Таким образом, вы отнимаете n дней с сегодняшнего дня 00:00:00. Вы можете сделать это, используя .AddDays(-n).

В результате вы получите воскресенье, поэтому добавите 1, чтобы получить понедельник.

Я тестировал его на двух машинах, где у меня есть понедельник и воскресенье. устанавливается как первый день недели (можно проверить с помощью [System.Globalization.DateTimeFormatInfo]::CurrentInfo.FirstDayOfWeek), и в обоих случаях он работает одинаково.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...