【问题标题】:How to get UTC offset in javascript (analog of TimeZoneInfo.GetUtcOffset in C#)如何在 javascript 中获取 UTC 偏移量(C# 中 TimeZoneInfo.GetUtcOffset 的模拟)
【发布时间】:2012-02-27 07:19:03
【问题描述】:

在 C# 中你可以使用

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

但是如何在 javascript 中获取某个日期(日期对象)的 UTC 偏移量?

【问题讨论】:

标签: c# javascript client-side


【解决方案1】:
<script type="text/javascript">

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

</script>

【讨论】:

    【解决方案2】:

    Vadim 的答案可能会在除以 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()(这也有助于没有得到负分钟)以及我如何构建三元组。

    【讨论】:

    • 完美! +1 表示没有外部库并正确处理非 60 分钟偏移量。
    • 是否存在偏移量可以包含不为零的分钟值的情况,例如+03:45 ?我猜不是,因此它甚至可以简化为仅考虑小时数。
    【解决方案3】:

    强烈建议使用moment.js library 来获取与时间和日期相关的 Javascript 代码。

    在这种情况下,您可以通过运行获得ISO 8601 格式的UTC 偏移量:

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

    【讨论】:

      猜你喜欢
      • 2014-01-09
      • 2011-07-26
      • 2012-07-13
      • 1970-01-01
      • 2016-01-06
      • 2015-09-23
      • 1970-01-01
      • 2012-10-30
      相关资源
      最近更新 更多