php - DateTime::diff 和夏令时结束

标签 php datetime dst

上周末夏令时结束,时钟向后调了 1 小时。当比较日期处于不同时间时( Spring 和冬季时间),我发现 DateTime::diff() 的奇怪行为。

new DateTime('2015-10-28 12:50:00')->diff(new DateTime('2015-10-19 13:20:00'))

result = {DateInterval} [15]
    y = 0
    m = 0
    d = 9
    h = -1   # negative hour!
    i = 30
    s = 0

当差异超过一小时时一切正常:

new DateTime('2015-10-28 12:50:00')->diff(new DateTime('2015-10-19 14:20:00'))

result = {DateInterval} [15]
    y = 0
    m = 0
    d = 8
    h = 22
    i = 30
    s = 0

有什么想法可以解决这个问题吗?这是 PHP 中的错误吗?

最佳答案

是的,这是 PHP 目前不处理 DST 转换的错误。错误报告 #51051 (仍然开放)和#55253 (在 PHP 5.3.9 中修复)描述您遇到的问题。最佳实践是在 UTC 中进行所有日期计算,这可以避免此问题。看这个post了解更多详情

关于php - DateTime::diff 和夏令时结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33392011/

相关文章:

python - 将日期转换为自纪元以来的 float

sql - 使用夏令时计算时间戳

php - Laravel 5 类管理员不存在

php - php中的简单正则表达式,格式化十进制数

java - 一天中的时间(以分钟为单位)Java

javascript - 仅使用年(没有月或日)与谷歌时间线图表

PHP UTC 到本地时间

java - Joda-用java中的时区确定日期的时间

php - 重温 PHP 中如何从多维数组中删除重复值

php - 避免在表单上使用 isset()?