web-dev-qa-db-ja.com

JavaScriptでUTCオフセットを取得する方法(C#のTimeZoneInfo.GetUtcOffsetのアナログ)

C#では次を使用できます

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

しかし、JavaScriptで特定の日付(日付オブジェクト)のUTCオフセットを時間単位で取得するにはどうすればよいですか?

23
Andrei M

Vadimの答えは、60で除算した後に小数点を取得する可能性があります。すべてのオフセットが60分の完全な倍数であるとは限りません。 ISO8601文字列の値をフォーマットするために使用しているものは次のとおりです。

_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()を使用した理由(これは負の分を取得しないのにも役立ちます)そして私がどのように三元を構築したか。

34
Allan

私は強く時間と日付に関連するJavascriptコードに moment.jsライブラリ を使用することをお勧めします。

この場合、以下を実行することで ISO 8601 フォーマットされたUTCオフセットを取得できます。

> moment().format("Z")
> "-08:00"
11
Chris W.
<script type="text/javascript">

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

</script>
7
Vadim Gulyakin