1) Las hora GMT la obtiene PHP del servidor y este se la da a su vez el Sistema Operativo. Cuando configuras la hora de tu sistema operativo le dices en que franja horaria está. Ásí que si tu le pides la hora GMT sólo hace que restar/sumar la diferencia horaria que configurastes.
2) Para lo que propones ..Hace un tiempo hice una función para tal fin. Puedes verla aquí:
http://www.forosdelweb.com/showthrea...hreadid=119333
** Lo que comentas del ajuste horario .. Tienes unos servidores especiales de Hora. Cada pais tiene el suyo con la hora local del pais exacta. Y si quieres la hora GMT 0 .. solo tienes que ve la hora del Meridiano de Greenwich.
Estos servidores usan el protocolo
NTP (o SNTP):
http://www.faqs.org/rfcs/rfc1769.html
Si quieres .. puedes hacerte un script que vía sockets conecte a este tipo de servidores y obtenga la hora exacta GMT 0 (o incluso la hora exacta de X país) ..
Ejemplo en PHP:
http://www.php-resource.de/forum/sho...d/t-11057.html
(sólo recuerda que la conexión a ese servidor puede demorarse un tiempo .. así que mejor actualiza (sincroniza) la hora cuando cambie el horario de verano/invierto, .. pero, esto lo debería hacer tu servidor (con su sistema operativo) no tus scripts).
** El tema de los "cumpleaños"... Fijate cuando se celebra año nuevo .. Si ves la TV ese dia 31 diciembre .. veras como te van dando noticias de que en "china" ya es año nuevo .. luego otro pais .. y así con todos hasta que le llega a tu pais (esto es más bien clase de geografía xDD .. te recuerdo que la tierra rota sobre si misma :P).
Así que todos los que estén en esa franja horaria (del que cumple los años) podrán felicitarle a la hora exacta .. Los demás lo harán con adelanto o retraso según corresponda.
Un saludo,