PHP使用DateTime的modify方法取周数组时错位拿到下一周的问题
核心需求
- 生成覆盖周一到周六的日期数组
- 支持按周偏移量跨周期取值,生成过程跳过周日,实现相邻目标周期的连续取值衔接
现有实现代码
function getWeek($w){ $d = []; $week = $w ?? 0; $dw = new \DateTime(); $dw->modify(''.$week.' week monday'); for($i = 0; $i < 6; $i++){ $d[$i] = $dw->format('Y-m-d'); if($i == 5){ $dw->modify('+2 day'); }else{ $dw->modify('+1 day'); } } return $d; }
现存问题
- 当周偏移量取默认值
0时,偶发跳过当前自然周、直接返回下一周日期的异常 - 临时将周偏移量设为
-1时,可正确返回当前周的日期,但跨过下一个周一节点后,函数仍返回此前周期的日期,无法正确匹配目标周期
待排查方向
- 上述错位问题是否与PHP默认使用UTC时区的配置有关
- 是否可以通过调整实现逻辑、替换原生时间处理函数的方式,完全修复周期错位问题
内容的提问来源于stack exchange,提问作者Tonic
相关产品推荐
相关产品推荐

