PHP实现带时区的周范围获取,解决GMT+1时区1小时时差问题
修复GMT+1时区下周范围计算的1小时时差问题
原有代码通过手动加3600秒适配时区的方式不可靠,存在两个核心问题:
- 未考虑夏令时切换场景,每年会有两天时区偏移不是整1小时
strtotime解析相对日期时默认使用PHP全局配置的时区,和手动添加的1小时偏移不匹配,最终导致日期计算误差
推荐使用PHP DateTime类显式指定时区,完全避免手动计算时差的问题,修正后代码如下:
/** * 获取GMT+1时区下的周范围(上周六到下周六) * @return array */ function get_week_range(){ // 显式指定GMT+1时区,含夏令时自动适配,不受全局时区配置影响 $timezone = new DateTimeZone('Europe/Paris'); $current_date = new DateTime('now', $timezone); $week_range = []; // 计算周起始:上周六 $start = clone $current_date; $start->modify('last saturday'); $week_range['start'] = $start->format('d/m/Y'); // 计算周结束:下周六 $end = clone $current_date; $end->modify('next saturday'); $week_range['end'] = $end->format('d/m/Y'); return $week_range; }
补充配置说明
- 如果不需要夏令时支持,固定使用GMT+1偏移,可将
DateTimeZone参数替换为'Etc/GMT-1' - 如果需要全局生效时区配置,可在项目公共入口文件添加代码:
date_default_timezone_set('Europe/Paris');,后续所有date、strtotime等原生日期函数都会自动适配该时区
内容的提问来源于stack exchange,提问作者esQmo_
相关产品推荐
相关产品推荐

