Foros del Web » Programando para Internet » PHP »

Obtener el GMT de una zona horaria, ej America/Bogota GMT-5

Estas en el tema de Obtener el GMT de una zona horaria, ej America/Bogota GMT-5 en el foro de PHP en Foros del Web. Hola. Estoy tratando de mostrar al usuario la diferencia GMT sobre un timezone dado. Obtengo el timezone del usuario en formato string ej: 'America/Bogota' Y ...
  #1 (permalink)  
Antiguo 01/08/2011, 11:28
 
Fecha de Ingreso: junio-2011
Mensajes: 45
Antigüedad: 12 años, 10 meses
Puntos: 0
Obtener el GMT de una zona horaria, ej America/Bogota GMT-5

Hola.

Estoy tratando de mostrar al usuario la diferencia GMT sobre un timezone dado.

Obtengo el timezone del usuario en formato string ej: 'America/Bogota' Y quisiera mostrar para los que no somos de alli la diferencia horaria: GMT -5
He creado estas tres maneras:
Código PHP:
Ver original
  1. <?
  2. ///////////// Sencilla funciona en php 5.2 ///////////////
  3. //$timezone = 'America/Bogota';
  4. //$timezone = 'Europe/Madrid';
  5. $timezone = 'America/Caracas';
  6. $objHoraUsuario= new DateTime();
  7. $objHoraUsuario->setDate(date('Y'), date('m'), date('d'));
  8. $objHoraUsuario->setTime(date('H'), date('i'), date('s'));
  9. $objHoraUsuario->setTimezone(new DateTimeZone($timezone));
  10. $offset=$objHoraUsuario->getOffset();
  11. $gmt=($offset/60)/60;
  12. if($gmt<0){$tag="GMT ";}
  13. else{$tag="GMT +";}
  14. echo $tag . $gmt;
  15. echo "<br>";
  16.  
  17.  
  18.  
  19. //////////////////////////En php 5.2 ////////////////////
  20. //$timezone = 'America/Bogota';
  21. $timezone = 'Europe/Madrid';
  22. //$timezone = 'America/Caracas';
  23.  
  24. $timezoneinfo = new DateTimeZone($timezone);
  25. $arraytime = $timezoneinfo->getTransitions();
  26. $gmttime=0;
  27. $i = 0;
  28.  
  29. foreach ($arraytime as $transicion)
  30. {
  31.     if ($transicion['ts'] + $arraytime[$i]['offset'] >= $gmttime)
  32.     {
  33.         $indice = $i;
  34.         break;
  35.     }
  36.     $i ++;
  37. }
  38. $newtime = $gmttime + $arraytime[$indice]['offset'];
  39. $gmt=($newtime/60)/60;
  40. if($gmt<0){$tag="GMT ";}
  41. else{$tag="GMT +";}
  42. echo $tag . $gmt;
  43. echo "<br>";
  44.  
  45.  
  46.  
  47.  
  48. //////////////////////////A partir de php 5.3 ////////////////////
  49. //$timezone = 'America/Bogota';
  50. $timezone = 'Europe/Madrid';
  51. //$timezone = 'America/Caracas';
  52.  
  53. // Calculamos la hora del timezone y la sumamos a la hora del servidor
  54. $objHoraUsuario= new DateTime();
  55. $objHoraUsuario->setDate(date('Y'), date('m'), date('d'));
  56. $objHoraUsuario->setTime(date('H'), date('i'), date('s'));
  57. $objHoraUsuario->setTimezone(new DateTimeZone($timezone));
  58. $offset=$objHoraUsuario->getOffset();
  59. $objHoraUsuario->setTime(date('H'), date('i'), date('s')+$offset);
  60. echo $objHoraUsuario->format('Y-m-d H:i:s'); echo "<br>";
  61.  
  62. //Obtenemos la transicion desde la hora del usuario, sino cogeria la del servidor y cuando hay cambio de hora fallaria.
  63. $timezoneinfo = new DateTimeZone($timezone);
  64. $arraytime = $timezoneinfo->getTransitions($objHoraUsuario->format('U'),$objHoraUsuario->format('U'));
  65. $gmttime=0;
  66. $i = 0;
  67.  
  68. foreach ($arraytime as $transicion)
  69. {
  70.     if ($transicion['ts'] + $arraytime[$i]['offset'] >= $gmttime)
  71.     {
  72.         $indice = $i;
  73.         break;
  74.     }
  75.     $i ++;
  76. }
  77. $newtime = $gmttime + $arraytime[$indice]['offset'];
  78. $gmt=($newtime/60)/60;
  79. if($gmt<0){$tag="GMT ";}
  80. else{$tag="GMT +";}
  81. echo $tag . $gmt;
  82. ?>

Parece que funciona, queria saber si creeis que funcionara bien siempre y de paso como me ha costado tanto encontrar informacion sobre ello compartirlo con vosotros.
  #2 (permalink)  
Antiguo 04/08/2011, 05:26
Avatar de ramiro_md  
Fecha de Ingreso: septiembre-2008
Mensajes: 274
Antigüedad: 15 años, 7 meses
Puntos: 26
Respuesta: Obtener el GMT de una zona horaria, ej America/Bogota GMT-5

Lee esto: http://www.sortea2.com/blog/2008/11/...orarias-y-php/

Etiquetas: gmt, zonas, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:30.