php - mexico_city - ¿Cómo obtener la zona horaria del cliente?
zona horaria chile php (4)
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo detectar la zona horaria del usuario? [duplicado] 6 respuestas
Estoy escribiendo una aplicación usando Zend_Framework (para que la solución pueda confiar en ella).
¿Cómo obtener la zona horaria del cliente?
Por ejemplo, si alguien en Moscú, Rusia, quiero obtener 3 * 60 * 60 (porque hay UTC + 3). Si él está en el Reino Unido, quiero cero. Si usa UTC-3: 30 (¿Canadá?), Quiero -3.5 * 60 * 60.
(No se trata de un formato; estoy de acuerdo en obtener ''Europa / Moscú'' o ''UTC-3'' para San Petersburgo, Rusia; se trata más bien de utilizar el cliente de zona horaria. Pero se prefiere delta en segundos)
La única solución que me viene a la mente es dejar javascript obtener la hora local para mí y redirigir.
Consulte este artículo sobre cómo detectar la zona horaria configurando una Cookie a través de JavaScript que contendrá la zona horaria del cliente. Es bastante largo, pero eso es porque es bastante detallado. Implementé una solución en esta línea en una de mis propias aplicaciones y funciona bastante bien.
También puede enviar la zona horaria a través de Ajax al servidor y hacer que haga lo que necesite para hacerlo. O bien, si no está haciendo ningún cálculo en el servidor con él, simplemente aplique el lado del cliente de la zona horaria cuando sea necesario. Realmente depende de tu uso.
Además de eso, sugiero que deje que el visitante configure su zona horaria y la almacene en la Cookie o en una Sesión.
Creo que tu mejor opción es adivinar en base al encabezado Accept-Language
enviado por el cliente.
Escribí una función usando jQuery y PHP. ¡Esto se prueba y funciona!
En la página de PHP donde desea tener la zona horaria como una variable, tenga 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 leerá la variable de sesión "tiempo", que ahora vamos a crear.
En la misma página, en el, primero debe incluir jQuery:
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
También en el, debajo de jQuery, pega esto:
<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>
Puede haberlo notado o no, pero debe cambiar la URL a su dominio real.
Una última cosa. Probablemente se esté preguntando qué diablos es timezone.php. Bueno, es simplemente esto: (crea un nuevo archivo llamado timezone.php y apunta a él con la URL anterior)
<?php
session_start();
$_SESSION[''time''] = $_GET[''time''];
?>
Si esto funciona correctamente, primero cargará la página, ejecutará JavaScript y volverá a cargar 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.
Esta es una solución de cookies con muy poca sobrecarga:
echo <<<EOE
<script type="text/javascript">
if (navigator.cookieEnabled)
document.cookie = "tzo="+ (- new Date().getTimezoneOffset());
</script>
EOE;
if (!isset($_COOKIE[''tzo''])) {
echo <<<EOE
<script type="text/javascript">
if (navigator.cookieEnabled) document.reload();
else alert("Cookies must be enabled!");
</script>
EOE;
die();
}
$ts = new DateTime(''now'', new DateTimeZone(''GMT''));
$ts->add(DateInterval::createFromDateString($_COOKIE[''tzo''].'' minutes''));