PHP日期判断:确定当前及未来7天所属交替周(A/B)并输出对应内容
解决PHP交替周A/B判断问题
我来帮你搞定这个交替周判断的需求!核心思路是利用周数的奇偶性来循环判断A/B周,不用硬写每年的起止日期,适配任意时间范围,完美解决你要判断未来7天所属周的问题。
核心逻辑
- 锚定基准周:你给出的
2018-01-01是周一A,把它作为判断的基准起点。 - 统一判断标准:不管目标日期是周几,都先转成当周的周一(整周都属于同一个A/B类型)。
- 计算周数差:算出基准周一和目标周一之间的周数差,偶数差对应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
相关产品推荐
相关产品推荐

