DateTime与Timestamp值不一致求助:如何获取每日21:00的Timestamp
问题原因及解决方案
你的问题核心是时区不匹配:
DateTime::createFromFormat('G:i', '21:00')创建对象时未指定时区,默认使用PHP全局时区(通常为UTC),因此该对象内部记录的是UTC时间2022-08-24 21:00:00。- 调用
getTimestamp()得到的是UTC时间对应的Unix时间戳(1661374800),而你的目标时区Europe/Paris在夏令时期间为UTC+2,这个时间戳转换为巴黎时区时间就是23:00,和你看到的结果一致。 strtotime('21:00')同样依赖PHP全局时区生成时间戳,传给wp_date也无法修正时区偏差。
要获取巴黎时区每日21:00对应的时间戳,只需在创建DateTime对象时指定目标时区即可:
$timezone = wp_timezone(); // 创建带指定时区的DateTime对象 $start = DateTime::createFromFormat('G:i', '21:00', $timezone); $startTimestamp = $start->getTimestamp(); // 这就是巴黎时区21:00对应的时间戳
也可以用WordPress的wp_date实现更简洁的写法:
$timezone = wp_timezone(); // 获取当前日期21:00对应的时间戳(巴黎时区) $startTimestamp = wp_date('U', strtotime(date('Y-m-d') . ' 21:00'), $timezone);
验证说明:生成的时间戳转换为巴黎时区是当日21:00,转换为UTC则是当日19:00(夏令时UTC+2),这正是你需要的结果。
内容的提问来源于stack exchange,提问作者Sébastien Serre
相关产品推荐
相关产品推荐

