如何在PowerShell中把一个日期范围分割成每月的子范围?

问题描述 投票:0回答:1

在Powershell中,假设。

$rangeFrom = "2020-03-01" 
$rangeTo  =  "2020-05-13" 

我怎么能获得。

$monthRange[0] = "2020-03-01","2020-03-31"
$monthRange[1] = "2020-04-01","2020-04-30"
$monthRange[2] = "2020-05-01","2020-05-13"

日期将在循环中作为字符串(fromto)使用在不支持多于一个月范围的命令上,例如:。

myCommand -From $rangeFrom -To $rangeTo # keep this in one month range
powershell datetime date-range
1个回答
4
投票

通过使用 DateTime 对象,你可以解决最多的麻烦,比如计算一个月的最后一天或迭代日期。你可以使用以下代码来解决你的问题。

$rangeFrom = "2019-12-15" 
$rangeTo   = "2020-05-13"

$monthRange = @()

$dateFrom = Get-Date $rangeFrom
$dateTo = Get-Date $rangeTo
$dateCur = Get-Date $dateFrom -Day 1
while ($dateCur -lt $dateTo) {
    if (($dateCur.Year -eq $dateFrom.Year) -and ($dateCur.Month -eq $dateFrom.Month)) {
        $dateBegin = $dateFrom # First month exception
    } else {
        $dateBegin = $dateCur
    }
    if (($dateCur.Year -eq $dateTo.Year) -and ($dateCur.Month -eq $dateTo.Month)) {
        $dateEnd = $dateTo # Last month exception
    } else {
        $dateEnd = $dateCur.AddMonths(1).AddDays(-1)
    }
    $monthRange += [Tuple]::Create($dateBegin.toString('yyyy-MM-dd'), $dateEnd.toString('yyyy-MM-dd'))
    $dateCur = $dateCur.AddMonths(1)
}
$monthRange

输出:

Item1      Item2      Length
-----      -----      ------
2019-12-15 2019-12-31      2
2020-01-01 2020-01-31      2
2020-02-01 2020-02-29      2
2020-03-01 2020-03-31      2
2020-04-01 2020-04-30      2
2020-05-01 2020-05-13      2

你可以像这样访问单个元素

$monthRange[2].Item2

输出:

2020-02-29
© www.soinside.com 2019 - 2024. All rights reserved.