Ответ Вадима может дать вам несколько десятичных знаков после деления на 60;не все смещения являются идеальными кратными 60 минутам.Вот что я использую для форматирования значений для строк ISO 8601:
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;
}
Возвращает такие значения, как "+01: 30" или "-05: 00".Вы можете извлечь числовые значения из моего примера, если это необходимо для выполнения вычислений.
Обратите внимание, что getTimezoneOffset()
возвращает разницу в количестве минут от UTC, так что значение кажется противоположным (отрицается) того, что необходимодля форматов, таких как ISO 8601. Поэтому я использовал Math.abs()
(что также помогает избежать получения отрицательных минут) и как я построил троичный.