DateTime :: diff和夏令时结束

时间:2015-10-28 13:13:15

标签: php datetime dst

上周末我们结束了DST,时钟倒退了1个小时。我发现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中的错误吗?

1 个答案:

答案 0 :(得分:2)

是的,这是PHP目前无法处理DST转换的错误。错误报告#51051(仍然打开)和#55253(在PHP 5.3.9中修复)描述了您遇到的问题。最佳做法是使用UTC进行所有日期计算,从而避免此问题。有关详细信息,请参阅此post