如何在 PowerShell 中将日期范围拆分为每月的子范围?
How to split a date range into monthly subranges in PowerShell?
在 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"
日期将作为字符串 (from/to) 在循环中用于不支持超过一个月范围的命令,例如:
myCommand -From $rangeFrom -To $rangeTo # keep this in one month range
通过使用 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
在 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"
日期将作为字符串 (from/to) 在循环中用于不支持超过一个月范围的命令,例如:
myCommand -From $rangeFrom -To $rangeTo # keep this in one month range
通过使用 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