Сегодняшняя дата PowerShell 4-15-2020 (дата получения) .AddMonths (-6) .month), ожидаемая 4-15-2019, получение 31.10.2020 - PullRequest
1 голос
/ 15 апреля 2020

Я использую PowerShell, чтобы получить предыдущие 6 месяцев. сегодняшняя дата 4-15-2020 с использованием foreach l oop

$months = ((get-date).AddMonths(-1).month,(get-date).AddMonths(-2).month,(get-date).AddMonths(-3).month,(get-date).AddMonths(-4).month,(get-date).AddMonths(-5).month,(get-date).AddMonths(-6).month)
foreach($Month in $months){
$Year = (get-date).Year
$StartOfMonth = Get-Date -Year $Year -Month $Month -Day 1
$DaysInMonth = [DateTime]::DaysInMonth($Year, $Month)
$EndOfMonth = Get-Date -Year $Year -Month $Month -Day $DaysInMonth
$Month = $StartOfMonth.ToString("MMM/yyyy")
$StartOfMonth = $StartOfMonth.ToString("MM/dd/yyyy")
$EndOfMonth = $EndOfMonth.ToString("MM/dd/yyyy")
$StartOfMonth
$EndOfMonth
$Month
}

Я получаю:

03/01/2020
03/31/2020
Mar/2020
02/01/2020
02/29/2020
Feb/2020
01/01/2020
01/31/2020
Jan/2020
12/01/2020
12/31/2020
Dec/2020
11/01/2020
11/30/2020
Nov/2020
10/01/2020
10/31/2020
Oct/2020

и ожидаемый

03/01/2020
03/31/2020
Mar/2020
02/01/2020
02/29/2020
Feb/2020
01/01/2020
01/31/2020
Jan/2020
12/01/2019
12/31/2019
Dec/2019
11/01/2019
11/30/2019
Nov/2019
10/01/2019
10/31/2019
Oct/2019

это ошибка или что-то не так с моим кодом?

Ответы [ 2 ]

3 голосов
/ 15 апреля 2020

Вы продолжаете устанавливать год на основе текущего года - $Year = (get-date).Year

Вместо этого я бы сделал следующее:

$today = Get-Date

foreach ($MonthOffset in -1..-6) {
    # Find a date in the intended month based on ([current date] + [month offset])
    # Extract year and month from that
    $MonthDate = $today.AddMonths($MonthOffset)
    $Year = $MonthDate.Year
    $Month = $MonthDate.Month

    $StartOfMonth = Get-Date -Year $Year -Month $Month -Day 1
    $DaysInMonth = [DateTime]::DaysInMonth($Year, $Month)
    $EndOfMonth = Get-Date -Year $Year -Month $Month -Day $DaysInMonth
    $Month = $StartOfMonth.ToString("MMM/yyyy")
    $StartOfMonth = $StartOfMonth.ToString("MM/dd/yyyy")
    $EndOfMonth = $EndOfMonth.ToString("MM/dd/yyyy")
    $StartOfMonth
    $EndOfMonth
    $Month
}
0 голосов
/ 15 апреля 2020

Спасибо за понимание Матиас Р. Йессен. Я мог использовать выше, как это:

foreach ($MonthOffset in -1..-6) {
    # Find a date in the intended month based on ([current date] + [month offset])
    # Extract year and month from that
    $today = Get-Date
    $MonthDate = $today.AddMonths($MonthOffset)
    $Year = $MonthDate.Year
    $Month = $MonthDate.Month

    $StartOfMonth = Get-Date -Year $Year -Month $Month -Day 1
    $DaysInMonth = [DateTime]::DaysInMonth($Year, $Month)
    $EndOfMonth = Get-Date -Year $Year -Month $Month -Day $DaysInMonth
    $Month = $StartOfMonth.ToString("MMM/yyyy")
    $StartOfMonth = $StartOfMonth.ToString("MM/dd/yyyy")
    $EndOfMonth = $EndOfMonth.ToString("MM/dd/yyyy")
    $StartOfMonth
    $EndOfMonth
    $Month
}

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