PHP列表视图动态周切换实现:如何输出周一到周日的正确周区间
问题根源
现有代码的核心问题有两个:
- 偏移量计算逻辑错误:
date('N')返回1(周一)到7(周日)的星期数值,初始获取的$ts已经是周一的时间戳,再执行$ts = $ts - $offset * 86400时,相当于在周一基础上再往前推N天,直接跳到了上周日,所以输出的周区间是周日到周六,比实际周早一周。 - 语法错误:
$ts = date(strtotime('last monday'))写法错误,date函数第一个参数需要传入日期格式,此处不需要包裹date,直接使用strtotime返回的时间戳即可。
修复后代码(周一到周日周区间)
// 基准时间戳,默认取当前时间 $base_ts = time(); // 周偏移量:0为当前周,-1为上周,1为下周,可对接上下周切换按钮动态修改 $week_offset = 0; // 精准获取指定偏移周的周一零点时间戳 $ts = strtotime('monday this week', $base_ts) + $week_offset * 7 * 86400; // 输出ISO标准周数 $week = date('W', $ts); echo "<p>$week</p>"; // 循环输出周一到周日共7天的日期 for ($x = 0; $x < 7; $x++, $ts += 86400) { echo '<p>' . date("d.m.Y", $ts) . '</p>'; }
修改说明
- 废弃原有的手动计算偏移的错误逻辑,直接使用
strtotime('monday this week')精准获取当前周周一的时间戳,避免手动计算误差 - 周偏移量
$week_offset可直接对接上下周切换按钮的传参,无需额外调整其他逻辑 - 输出的周区间完全匹配ISO周数统计规则,不会再出现周数提前一周的问题
内容的提问来源于stack exchange,提问作者Sven Lorenzino
相关产品推荐
相关产品推荐

