This article was moved to MDriven Wiki – Time zones and sanity–post for future reference
This is just as much for future reference to our selves as an explanation of current state of time zone handling in MDriven Turnkey.
UTC – Coordinated Universal Time
The world is divided into time zones – GMT + or – Some hours.
The “Some hours” change depending on time of year due to daylight saving strategies applied by users of different time zones.
This means that if you enter 2015-01-01 in a browser that resides in Sweden – plus 1 hour (in January anyway) – and then send back the value to the server for storage in UTC – you will store 2014-12-31 23:00. This is what most developers would say was less than perfect…
And currently our take on this is that it is wrong in most of all cases.
Ok – I do not say that time zones are unnecessary and should be ignored – I just say that in 99% percent of all systems that I have been involved in dates and times should be handled just as the user entered them. Times and Dates should move around in the system – from front end to backend and to and from database without being inspected from different angles or time zones.
When time zones are important – there will almost always be some other data in the model that explains what and why that time zone should be used.
#1 Connecting flights always show up in the local airport time (where the connection is). The fact that it is the airport that has a time zone and not the browser in this case must be clear. Hence should the location of the airport be what controls the time zone – not the location of the browser entering or reading the information.
When I have been trying to get my head around these issues I have found tons of stackoverflow posts that state that we can just use d.getTimezoneOffset() and compensate for time zone stuff – no problemo! Well – if I enter a summer date in winter time it will be 1 hour off if I am in a time zone that use daylight saving… Show stopper!
This solution makes most sense to me right now and things stop to be strange – like having odd values in the database just because the time was entered in a browser that happened to be in a +X time zone.