2012-02-05 11 views

Respuesta

7
<script type="text/javascript"> 

var d = new Date() 
var gmtHours = -d.getTimezoneOffset()/60; 
document.write("The local time zone is: GMT " + gmtHours); 

</script> 
27

La respuesta de Vadim puede obtener algunos puntos decimales después de la división por 60; no todas las compensaciones son múltiplos perfectos de 60 minutos. Esto es lo que estoy usando para valores de formato ISO 8601 cuerdas:

function pad(value) { 
    return value < 10 ? '0' + value : value; 
} 
function createOffset(date) { 
    var sign = (date.getTimezoneOffset() > 0) ? "-" : "+"; 
    var offset = Math.abs(date.getTimezoneOffset()); 
    var hours = pad(Math.floor(offset/60)); 
    var minutes = pad(offset % 60); 
    return sign + hours + ":" + minutes; 
} 

Esto devuelve valores como "01: 30" o "-05: 00". Puede extraer los valores numéricos de mi ejemplo si es necesario para hacer cálculos.

Tenga en cuenta que getTimezoneOffset() devuelve la diferencia de minutos de UTC, por lo que el valor parece ser opuesto (negado) de lo que se necesita para formatos como ISO 8601. De ahí que utilicé Math.abs() (que también ayuda a no obtener resultados negativos minutos) y cómo construí el ternario.

3

I highly recomendamos usar moment.js library para la hora y la fecha del código JavaScript relacionado.

En cuyo caso, se puede obtener una compensación mediante la ejecución de ISO 8601 UTC formato:

> moment().format("Z") 
> "-08:00"