2012-02-05 3 views

risposta

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 risposta di Vadim potrebbe ottenere alcuni punti decimali dopo la divisione di 60; non tutti gli offset sono multipli perfetti di 60 minuti. Ecco quello che sto usando per formattare i valori di ISO 8601 stringhe:

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; 
} 

Questo restituisce i valori come "+01: 30" o "-05: 00". È possibile estrarre i valori numerici dal mio esempio se necessario per eseguire calcoli.

Nota che getTimezoneOffset() restituisce un numero di minuti di differenza da UTC, in modo che il valore sembra essere opposto (negato) di ciò che è necessario per formati come ISO 8601. Quindi perché ho usato Math.abs() (che aiuta anche con non ottenere negativo minuti) e come ho costruito il ternario.

3

I altamente consiglia di utilizzare moment.js library per codice Javascript relativo alla data e all'ora.

In questo caso è possibile ottenere un offset da corsa ISO 8601 UTC formattato:

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