PowerShell数组筛选:如何筛选今日至未来3周内的日期记录
问题解决:筛选今日至未来3周内的日期条目
原代码的问题点
- 变量名拼写错误:定义的
$referenceDate在后续判断中误写为$referenceTime - 正则表达式不匹配单数字月/日:原正则
^\d{2}/\d{2}/\d{4}要求月日必须是两位数字,但示例数据是1/4/2023这种单数字格式,应改为匹配1-2位数字的^(\d{1,2}/\d{1,2}/\d{4}) - 日期解析格式错误:
ParseExact用了MM/dd/yyyy,但示例日期是单数字月日,需改为M/d/yyyy - 筛选逻辑错误:原代码判断日期大于未来3周的日期,和需求的「今日到未来3周内」完全相反,且未限定下限为今日
修正后的代码
# 定义时间范围:今日0点到未来3周后的0点 $today = (Get-Date).Date $threeWeeksLater = $today.AddDays(21) Get-Content -Path 'Dates.ini' | Where-Object { $_ -match '^(\d{1,2}/\d{1,2}/\d{4})' } | Where-Object { # 解析日期,用不变文化避免区域设置干扰 $parsedDate = [datetime]::ParseExact($matches[1], 'M/d/yyyy', [System.Globalization.CultureInfo]::InvariantCulture) # 判断是否在目标范围内 $parsedDate -ge $today -and $parsedDate -le $threeWeeksLater } | ForEach-Object { $_ # 此处可添加自定义操作 }
代码说明
(Get-Date).Date:获取今日的日期部分(时间为00:00:00),避免当前时间导致今日的日期被误排除- 正则
^(\d{1,2}/\d{1,2}/\d{4}):兼容单/双数字的月、日格式,确保能匹配所有示例日期 InvariantCulture:强制使用统一的日期解析规则,避免系统区域设置不同导致的解析失败- 筛选条件
$parsedDate -ge $today -and $parsedDate -le $threeWeeksLater:严格限定日期在今日至未来3周的范围内
测试示例数据时,会输出预期结果:
1/19/2023 First Last 1/25/2023 First Last 2/1/2023 First Last 2/8/2023 First Last
内容的提问来源于stack exchange,提问作者slacker220
相关产品推荐
相关产品推荐

