C#では次を使用できます
System.TimeZone.CurrentTimeZone.GetUtcOffset(someDate).Hours
しかし、JavaScriptで特定の日付(日付オブジェクト)のUTCオフセットを時間単位で取得するにはどうすればよいですか?
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()
を使用した理由(これは負の分を取得しないのにも役立ちます)そして私がどのように三元を構築したか。
私は強く時間と日付に関連するJavascriptコードに moment.jsライブラリ を使用することをお勧めします。
この場合、以下を実行することで ISO 8601 フォーマットされたUTCオフセットを取得できます。
> moment().format("Z")
> "-08:00"
<script type="text/javascript">
var d = new Date()
var gmtHours = -d.getTimezoneOffset()/60;
document.write("The local time zone is: GMT " + gmtHours);
</script>