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

PHP日期判断:确定当前及未来7天所属交替周(A/B)并输出对应内容

解决PHP交替周A/B判断问题

我来帮你搞定这个交替周判断的需求!核心思路是利用周数的奇偶性来循环判断A/B周,不用硬写每年的起止日期,适配任意时间范围,完美解决你要判断未来7天所属周的问题。

核心逻辑

  1. 锚定基准周:你给出的2018-01-01是周一A,把它作为判断的基准起点。
  2. 统一判断标准:不管目标日期是周几,都先转成当周的周一(整周都属于同一个A/B类型)。
  3. 计算周数差:算出基准周一和目标周一之间的周数差,偶数差对应A周,奇数差对应B周。

完整代码实现

<?php

/**
 * 判断目标日期所属的交替周类型(A/B)
 * @param DateTime $targetDate 要判断的日期
 * @param DateTime $baseMondayA 基准周一A的日期
 * @return string 'A'或'B'
 */
function getWeekType(DateTime $targetDate, DateTime $baseMondayA) {
    // 将目标日期转为当周的周一(确保整周判断一致)
    $targetMonday = clone $targetDate;
    $targetMonday->modify('Monday this week');
    
    // 计算两个周一之间的天数差
    $interval = $baseMondayA->diff($targetMonday);
    $daysDiff = $interval->days;
    
    // 计算周数差(每周7天)
    $weekDiff = floor($daysDiff / 7);
    
    // 基准周是A,偶数周差为A,奇数为B
    return $weekDiff % 2 === 0 ? 'A' : 'B';
}

// 定义基准周一A的日期(2018-01-01确实是周一)
$baseMondayA = new DateTime('2018-01-01');

// 1. 输出当前周的类型
$currentDate = new DateTime();
$currentWeekType = getWeekType($currentDate, $baseMondayA);
echo "本周为周一{$currentWeekType}\n";

// 2. 输出未来7天每天的所属周类型
echo "\n未来7天的周类型:\n";
for ($i = 1; $i <= 7; $i++) {
    $futureDate = clone $currentDate;
    $futureDate->modify("+{$i} days");
    $weekType = getWeekType($futureDate, $baseMondayA);
    echo $futureDate->format('Y-m-d') . " → 属于周一{$weekType}周\n";
}
?>

代码细节说明

  • getWeekType函数:封装了核心判断逻辑,支持传入任意日期和基准周,不管是现在还是未来的日期都能处理。
  • 当周周一转换:确保周内的周一到周日都返回相同的A/B类型,完全符合交替周的定义。
  • 跨年度兼容:DateTime::diff()能自动处理跨年度的天数计算,哪怕是几年后的日期,判断结果依然准确。

示例输出

本周为周一A

未来7天的周类型:
2024-05-21 → 属于周一A周
2024-05-22 → 属于周一A周
2024-05-23 → 属于周一A周
2024-05-24 → 属于周一A周
2024-05-25 → 属于周一A周
2024-05-26 → 属于周一A周
2024-05-27 → 属于周一B周

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:37:28