PowerShell:如何排除下一个周一为未来日期的日期
调整PowerShell代码排除下一个周一为未来日期的条目
针对你的需求,我们只需要在原代码的筛选逻辑里加一个简单的判断,就能轻松排除那些“下一个周一属于未来日期”的周一条目。
修改后的完整代码
$FiscalStart = [datetime]'2019-03-31' $date2 = Get-Date -Hour 0 -Minute 0 -Second 0 $EvaluateDates = 1..($date2 - $FiscalStart).Days | ForEach-Object { $FiscalStart.AddDays($_) } | Where-Object { $_.DayOfWeek -eq 'Monday' -and $_.AddDays(7) -le $date2 } $EvaluateDates
为什么这样改?
原代码的问题是它只会筛选出两个日期范围内的所有周一,但不会考虑这个周一的下一个周是否已经过去。我们新增的$_.AddDays(7) -le $date2判断,就是在检查当前选中的周一,加上7天后的日期(也就是下一个周一)是否不晚于我们设定的结束日期(当前日期的0点)。
拿你给出的测试场景来说:
- 当前日期是2020年2月9日(周日),
$date2会被设置为2020-02-09 00:00:00 - 原代码筛选出的最后一个周一是
2020-02-03,它的下一个周一是2020-02-10,显然大于$date2,所以会被新的过滤条件排除。
兼容任意工作日运行
这个逻辑不管你在一周中的哪一天运行都能正常工作:
- 如果当天是周一(比如
2020-02-10),当天的下一个周一是2020-02-17,大于$date2(2020-02-10 00:00:00),所以当天的周一不会被包含 - 如果当天是2020年2月18日(周二),那
2020-02-10这个周一的下一个周一是2020-02-17,小于等于$date2(2020-02-18 00:00:00),就会被正常包含
内容的提问来源于stack exchange,提问作者Frank
相关产品推荐
相关产品推荐

