2008-10-11 11 views

Respuesta

59
date('Z'); 

devuelve el desplazamiento en segundos UTC.

+1

Gracias. Desafortunadamente, PHP requiere que llame a date_default_timezone_set(). Si configura eso en GMT, las fechas de una base de datos seguirán estando en la hora local, pero la fecha ('Z') devolverá cero. Si lo configura en la zona horaria del servidor, también podría codificar el desplazamiento del servidor desde GMT en un archivo de inclusión. Es increíble que no hay una forma directa de hacer esto. EDIT: descubrí que puedes hacer date_default_timezone_set (date_default_timezone_get()). ¡Qué asqueroso! – Oscar

+0

fecha ('Z') devuelve el desplazamiento GMT en segundos – Dahomz

+0

que devuelve 0. – Adry

16

timezone_offset_get()

$this_tz_str = date_default_timezone_get(); 
$this_tz = new DateTimeZone($this_tz_str); 
$now = new DateTime("now", $this_tz); 
$offset = $this_tz->getOffset($now); 

no probado, pero debería funcionar

+0

útil si usted está utilizando la clase DateTime en PHP 5. Pero no lo soy. –

-2

date("Z") devolverá el desplazamiento UTC relativo a la zona horaria del servidor, no a la zona horaria de la máquina del usuario. Para obtener la zona horaria de la máquina del usuario, puede usar la función javascript getTimezoneOffset() que devuelve la diferencia horaria entre la hora UTC y la hora local, en minutos.

<script type="text/javascript"> 
    d = new Date(); 
    window.location.href = "page.php?offset=" + d.getTimezoneOffset(); 
</script> 

Y en page.php que mantiene su código PHP, puede hacer lo que quiera con ese valor de desplazamiento. O bien, en lugar de redirigir a otra página, puede enviar el valor de compensación a su script php a través de Ajax, de acuerdo con sus necesidades.

+1

OP explícitamente preguntado * "relativo a la zona horaria actual (sistema)?" * – Madbreaks

+1

OP pidió la solución PHP, no JS –

10

Hice una versión ligeramente modificada de lo que hizo Oscar.

date_default_timezone_set('America/New_York'); 
$utc_offset = date('Z')/3600; 

Esto me dio la compensación de mi zona horaria, EST, a UTC, en horas.

El valor de $ utc_offset fue -4.

11

echo date ('P'); // salida voluntad algo 02: 00 o -04: 00

1

Esta es la misma función de JavaScript date.getTimezoneOffset():

<?php 
echo round(date('Z')/-60,2); 
?> 
+0

['date (' Z ') '] (http://php.net/manual/en/function.date.php) es el *« Offset de zona horaria en segundos. »* El signo menos debe permanecer ... Divide por' 60'. No por '-60' Luego, esto dará como resultado el desplazamiento de la zona horaria del servidor. OP quería (en 2008) comparar el desplazamiento del usuario local con este valor del que habla. –

+0

@LouysPatriceBessette La función 'getTimezoneOffset()' en javascript da exactamente este valor (-180). –

+0

Eso es cierto para [JavaScript getTimezoneOffset()] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset) ... Y es en minutos en lugar de segundos. La fecha PHP no hace esta inversión de valor absoluto. –

Cuestiones relacionadas