You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 {
    $_
    # 此处可添加自定义操作
}

代码说明

  1. (Get-Date).Date:获取今日的日期部分(时间为00:00:00),避免当前时间导致今日的日期被误排除
  2. 正则^(\d{1,2}/\d{1,2}/\d{4}):兼容单/双数字的月、日格式,确保能匹配所有示例日期
  3. InvariantCulture:强制使用统一的日期解析规则,避免系统区域设置不同导致的解析失败
  4. 筛选条件$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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 20:16:07