How to get UTC offset in javascript (analog of TimeZoneInfo.GetUtcOffset in C#)

守給你的承諾、 提交于 2019-12-17 16:04:01

问题


In C# you can use

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

But how can I get UTC offset in hours for a certain date (Date object) in javascript?


回答1:


Vadim's answer might get you some decimal points after the division by 60; not all offsets are perfect multiples of 60 minutes. Here's what I'm using to format values for ISO 8601 strings:

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;
}

This returns values like "+01:30" or "-05:00". You can extract the numeric values from my example if needed to do calculations.

Note that getTimezoneOffset() returns a the number of minutes difference from UTC, so that value appears to be opposite (negated) of what is needed for formats like ISO 8601. Hence why I used Math.abs() (which also helps with not getting negative minutes) and how I constructed the ternary.




回答2:


I highly recommend using the moment.js library for time and date related Javascript code.

In which case you can get an ISO 8601 formatted UTC offset by running:

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



回答3:


<script type="text/javascript">

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

</script>


来源:https://stackoverflow.com/questions/9149556/how-to-get-utc-offset-in-javascript-analog-of-timezoneinfo-getutcoffset-in-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!