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.
http://www.electrictoolbox.com/javascript-get-timezone-offset/? – ken2k
Il codice C# è rotto per offset che non sono multipli di un'ora intera. – CodesInChaos