En principio no sé por qué le hechas la culpa a "mktime()" .. (de PHP) .. la hora que esa función entrega es la que el Sistema (Operativo) de tu servidor entrega .. si esa es mál obtenida o no es correcta .. eso es otro tema.
Por mi parte lo que hago es conectarme al servidor NTP (Network Time Protocol) del pais en cuestión que dá la hora oficial y así sincronizo la hora del servidor y .. como te comenté este a su vez se nutren las funciones que obtienen la fecha/hora de cualquier lenguaje (como PHP) o tu motor de BBDD (el que uses).
Por lo menos así lo hago para la hora "continental" de Chile oficial y no tengo problemas con los cambios horarios por estaciones ...
http://www.ntp.org/
Un saludo,