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

PowerShell备份磁带归还日期计算:求距当前周五12个月后的周五

PowerShell磁带归还日期计算修复方案

问题根因

原有代码仅在计算初始归档周五时做了星期对齐,追加12个月/3年周期后没有再次做周五校验调整,而公历年/月天数不是7的整数倍,会导致星期偏移,因此出现返回周六的问题。.NET内置的AddMonths()、AddYears()方法已经自动处理闰年逻辑,无需额外开发适配。

修复逻辑

  1. 先将日期作为DateTime对象计算,避免提前格式化丢失日期属性
  2. 封装通用的周五对齐方法,所有周期计算完成后统一做周五调整
  3. 共用同一基准时间变量,避免多次调用Get-Date()出现跨天时间不一致问题

完整修改后代码

# 通用方法:将输入日期对齐到最近的周五(默认优先当周周五,超过则向前对齐)
function ConvertTo-Friday([DateTime]$InputDate) {
    return $InputDate.AddDays(5 - [int]$InputDate.DayOfWeek)
}

# 取当前时间作为统一计算基准,避免跨天误差
$now = Get-Date
# 计算归档基准周五
$vaultFriday = ConvertTo-Friday $now

# 计算各类型归还日期,先加周期再对齐周五,最后格式化
$Weekly = (ConvertTo-Friday $vaultFriday.AddDays(28)).ToString("MM/dd/yyyy")
$Monthly = (ConvertTo-Friday $vaultFriday.AddMonths(12)).ToString("MM/dd/yyyy")
$Yearly = (ConvertTo-Friday $vaultFriday.AddYears(3)).ToString("MM/dd/yyyy")

效果验证

以你举的2021年10月8日(周五)为例:

  • 加12个月得到2022年10月8日(周六)
  • 对齐周五计算:5 - 6 = -1,加-1天得到2022年10月7日(周五),符合需求。

可选调整:如果要求归还日期必须晚于周期到期日,不允许提前,可将对齐方法修改为:

function ConvertTo-Friday([DateTime]$InputDate) {
    $offset = 5 - [int]$InputDate.DayOfWeek
    # 偏移为负说明已过当周周五,向后偏移到下周五
    if ($offset -lt 0) { $offset += 7 }
    return $InputDate.AddDays($offset)
}

对应示例的2022年10月8日周六,会调整到2022年10月14日周五。

内容的提问来源于stack exchange,提问作者TechFA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:24:04