2

At last weekend we had end of DST and clocks were turned backward 1 hour. I've found a strange behaviour of DateTime::diff() when compared date are in different times: spring time and winter time.

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

when the difference is more than one hour everythin is ok:

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

Any ideas how to fix this? Is this a bug in PHP?

tommy
  • 388
  • 2
  • 14

1 Answers1

3

Yes, this is a bug PHP currently doesn't handle DST transitions. Bug reports #51051 (still open) and #55253 (fixed in PHP 5.3.9) describe the problems you're having.Best practice is to do all your date calculations in UTC, which avoids this problem. See this post for further details

Community
  • 1
  • 1
Alex
  • 21,273
  • 10
  • 61
  • 73