2011-01-20 28 views

Respuesta

48

Esto le dará la zona horaria como una variable de PHP. Escribí una función usando jQuery y PHP. ¡Esto se prueba y funciona!

En la página PHP en el que se desea tener la zona horaria como una variable, tienen este fragmento de código en algún lugar cerca de la parte superior de la página:

<?php  
    session_start(); 
    $timezone = $_SESSION['time']; 
?> 

Esto permitirá la lectura de la variable de sesión "tiempo", que ahora estamos a punto de crear

En la misma página, en la sección <head>, en primer lugar usted necesita para incluir jQuery:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> 

También en la sección <head> ,, pega este jQuery:

<script type="text/javascript"> 
    $(document).ready(function() { 
     if("<?php echo $timezone; ?>".length==0){ 
      var visitortime = new Date(); 
      var visitortimezone = "GMT " + -visitortime.getTimezoneOffset()/60; 
      $.ajax({ 
       type: "GET", 
       url: "http://domain.com/timezone.php", 
       data: 'time='+ visitortimezone, 
       success: function(){ 
        location.reload(); 
       } 
      }); 
     } 
    }); 
</script> 

Usted puede o puede que no lo hayas notado, pero debes cambiar la URL a tu dominio real.

Una última cosa. Probablemente se esté preguntando qué diablos es timezone.php. Bueno, es simplemente esto: (crear un nuevo archivo llamado timezone.php y apuntan a que con la URL anterior)

<?php 
    session_start(); 
    $_SESSION['time'] = $_GET['time']; 
?> 

Si esto funciona correctamente, primero se carga la página, ejecutar el código JavaScript y recarga la página ¡Entonces podrá leer la variable $ zonezone y usarla para su gusto! Devuelve el desplazamiento de zona horaria UTC/GMT actual (GMT -7) o la zona horaria en la que se encuentre.

Puede leer más sobre esto en mis blog

Saludos

</Westy92>

+0

¡casi me rindo en esto! Gracias ! – andrei

+1

recibo un error que dice $ timezone undefined. ¿por qué? – arboles

+6

Creo que esta solución es fundamentalmente incorrecta (al menos en algunas situaciones), porque le permite al usuario cambiar la hora, a lo que él quiera, simplemente llamando a http://domain.com/timezone.php –

9

Al igual que Oded ha respondido. Necesita tener este tipo de funcionalidad de detección en javascript.

He luchado con esto y me di cuenta de que la compensación no es suficiente. No le da ninguna información sobre el horario de verano, por ejemplo. Terminé escribiendo un código para mapear las claves de la base de datos de zoneinfo.

Al verificar varias fechas alrededor de un año, puede determinar con mayor precisión una zona horaria.

Pruebe el guión aquí: http://jsfiddle.net/pellepim/CsNcf/

basta con cambiar su zona horaria del sistema y haga clic en Ejecutar para probarlo. Sin embargo, si está ejecutando Chrome, debe realizar cada prueba en una nueva pestaña (y safar debe reiniciarse para detectar cambios en la zona horaria).

Si desea más detalles del código Salida: https://bitbucket.org/pellepim/jstimezonedetect/

+0

Este es probablemente el enfoque más razonable. –

27

En el lado del servidor Será no es tan preciso como con JavaScript. Mientras tanto, a veces se requiere para resolver dicha tarea. Solo para compartir la posible solución en este caso, escribo esta respuesta.

Si necesita determinar la zona horaria del usuario, puede hacerlo a través de servicios de Geo-IP. Algunos de ellos proporcionan zona horaria. Por ejemplo, este (http://smart-ip.net/geoip-api) podría ayudar:

<?php 
$ip  = $_SERVER['REMOTE_ADDR']; // means we got user's IP address 
$json = file_get_contents('http://smart-ip.net/geoip-json/' . $ip); // this one service we gonna use to obtain timezone by IP 
// maybe it's good to add some checks (if/else you've got an answer and if json could be decoded, etc.) 
$ipData = json_decode($json, true); 

if ($ipData['timezone']) { 
    $tz = new DateTimeZone($ipData['timezone']); 
    $now = new DateTime('now', $tz); // DateTime object corellated to user's timezone 
} else { 
    // we can't determine a timezone - do something else... 
} 
+1

http://smart-ip.net/ no se puede acceder ahora. Entonces esta solución es vaga. Creo que cerraron su servidor. Entonces use este código bajo su propio riesgo porque el resultado devuelto por este es nulo. –

+2

(-1) http://smart-ip.net/geoip-json/202.191.214.178 - Servicio temporal no disponible – Chinmay235

+3

Puede probar este sitio ahora: http://ip-api.com/json/. –

Cuestiones relacionadas