上周末夏令时结束,时钟向后调了 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/