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
<? ///////////// Sencilla funciona en php 5.2 /////////////// //$timezone = 'America/Bogota'; //$timezone = 'Europe/Madrid'; $timezone = 'America/Caracas'; $objHoraUsuario= new DateTime(); $objHoraUsuario->setTimezone(new DateTimeZone($timezone)); $offset=$objHoraUsuario->getOffset(); $gmt=($offset/60)/60; if($gmt<0){$tag="GMT ";} else{$tag="GMT +";} echo $tag . $gmt; echo "<br>"; //////////////////////////En php 5.2 //////////////////// //$timezone = 'America/Bogota'; $timezone = 'Europe/Madrid'; //$timezone = 'America/Caracas'; $timezoneinfo = new DateTimeZone($timezone); $arraytime = $timezoneinfo->getTransitions(); $gmttime=0; $i = 0; foreach ($arraytime as $transicion) { if ($transicion['ts'] + $arraytime[$i]['offset'] >= $gmttime) { $indice = $i; break; } $i ++; } $newtime = $gmttime + $arraytime[$indice]['offset']; $gmt=($newtime/60)/60; if($gmt<0){$tag="GMT ";} else{$tag="GMT +";} echo $tag . $gmt; echo "<br>"; //////////////////////////A partir de php 5.3 //////////////////// //$timezone = 'America/Bogota'; $timezone = 'Europe/Madrid'; //$timezone = 'America/Caracas'; // Calculamos la hora del timezone y la sumamos a la hora del servidor $objHoraUsuario= new DateTime(); $objHoraUsuario->setTimezone(new DateTimeZone($timezone)); $offset=$objHoraUsuario->getOffset(); echo $objHoraUsuario->format('Y-m-d H:i:s'); echo "<br>"; //Obtenemos la transicion desde la hora del usuario, sino cogeria la del servidor y cuando hay cambio de hora fallaria. $timezoneinfo = new DateTimeZone($timezone); $arraytime = $timezoneinfo->getTransitions($objHoraUsuario->format('U'),$objHoraUsuario->format('U')); $gmttime=0; $i = 0; foreach ($arraytime as $transicion) { if ($transicion['ts'] + $arraytime[$i]['offset'] >= $gmttime) { $indice = $i; break; } $i ++; } $newtime = $gmttime + $arraytime[$indice]['offset']; $gmt=($newtime/60)/60; if($gmt<0){$tag="GMT ";} else{$tag="GMT +";} echo $tag . $gmt; ?>
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.