Как получить смещение UTC в JavaScript (аналог TimeZoneInfo.GetUtcOffset в C #) - PullRequest
20 голосов
/ 05 февраля 2012

В C # вы можете использовать

System.TimeZone.CurrentTimeZone.GetUtcOffset(someDate).Hours

Но как я могу получить смещение UTC в часах на определенную дату (объект Date) в javascript?

Ответы [ 3 ]

31 голосов
/ 22 октября 2012

Ответ Вадима может дать вам несколько десятичных знаков после деления на 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() (что также помогает избежать получения отрицательных минут) и как я построил троичный.

7 голосов
/ 05 февраля 2012
<script type="text/javascript">

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

</script>
6 голосов
/ 12 января 2016

I весьма рекомендуем использовать библиотеку moment.js для кода Javascript, связанного со временем и датой.

В этом случае вы можете получить смещение UTC в формате ISO 8601 , выполнив:

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