PowerShell按天、小时及指定分钟间隔迭代的脚本修改需求
解决方案:添加分钟间隔迭代的PowerShell脚本
首先,我们需要在原有的天、小时循环基础上,添加第三个循环来处理指定分钟间隔的时间段拆分。核心思路是将每个小时划分为60 / $intMin个等长的时间块,然后按你需要的倒序输出这些时间段。
修改后的完整脚本
$Today = [DateTime]"2022-02-19" $intDays = 0 $intMin = 30 # 计算每个小时需要拆分的时间段数量(确保60能被$intMin整除,否则会有误差) $intervalsPerHour = 60 / $intMin For ($i=0; $i -le $intDays; $i++){ # 遍历当天的每个小时(从23点到0点倒序) For ($j=23; $j -ge 0; $j--){ # 遍历当前小时内的所有分钟间隔时间段(倒序输出) For ($k=$intervalsPerHour; $k -ge 1; $k--){ # 计算当前时间段的开始时间:当前小时 + (k-1)*间隔分钟数 $StartDate = ($Today.AddDays(-$i)).AddHours($j).AddMinutes($intMin * ($k - 1)) # 结束时间 = 开始时间 + 间隔分钟数 $EndDate = $StartDate.AddMinutes($intMin) # 格式化输出(和你的样例格式匹配) Write-Host $StartDate.ToString("M/d/yyyy h:mm:ss tt") `t $EndDate.ToString("M/d/yyyy h:mm:ss tt") } } }
关键修改说明
- 新增
$intervalsPerHour变量:自动计算每个小时需要拆分的时间段数量(比如30分钟间隔时,每个小时拆分为2段)。 - 第三个
For循环:从$intervalsPerHour到1倒序遍历,确保时间段从晚到早输出,和你的样例一致。 - 时间计算逻辑:
$StartDate:以当前小时的起始时间为基准,加上(k-1)*$intMin分钟,得到每个时间段的起点。$EndDate:直接在$StartDate基础上加上$intMin分钟,得到时间段的终点。
- 格式化输出:使用
ToString("M/d/yyyy h:mm:ss tt")确保输出格式和你提供的样例完全一致(比如2/19/2022 11:30:00 PM)。
测试输出
运行上述脚本后,你会得到和预期一致的结果:
2/19/2022 11:30:00 PM 2/20/2022 12:00:00 AM 2/19/2022 11:00:00 PM 2/19/2022 11:30:00 PM 2/19/2022 10:30:00 PM 2/19/2022 11:00:00 PM 2/19/2022 10:00:00 PM 2/19/2022 10:30:00 PM ...
额外提示
如果需要支持不能整除60的分钟间隔(比如17分钟),可以调整逻辑为基于结束时间往前推,避免出现时间段长度不一致的情况:
# 替代第三个循环的写法(支持非整除间隔) For ($k=1; $k -le [math]::Floor(60/$intMin); $k++){ $EndDate = ($Today.AddDays(-$i)).AddHours($j + 1).AddMinutes(-$intMin * ($k - 1)) $StartDate = $EndDate.AddMinutes(-$intMin) Write-Host $StartDate.ToString("M/d/yyyy h:mm:ss tt") `t $EndDate.ToString("M/d/yyyy h:mm:ss tt") }
内容的提问来源于stack exchange,提问作者anders1990
相关产品推荐
相关产品推荐

