【发布时间】:2012-02-27 07:19:03
【问题描述】:
在 C# 中你可以使用
System.TimeZone.CurrentTimeZone.GetUtcOffset(someDate).Hours
但是如何在 javascript 中获取某个日期(日期对象)的 UTC 偏移量?
【问题讨论】:
-
您的 C# 代码因偏移量不是整小时的倍数而损坏。
标签: c# javascript client-side
在 C# 中你可以使用
System.TimeZone.CurrentTimeZone.GetUtcOffset(someDate).Hours
但是如何在 javascript 中获取某个日期(日期对象)的 UTC 偏移量?
【问题讨论】:
标签: c# javascript client-side
<script type="text/javascript">
var d = new Date()
var gmtHours = -d.getTimezoneOffset()/60;
document.write("The local time zone is: GMT " + gmtHours);
</script>
【讨论】:
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()(这也有助于没有得到负分钟)以及我如何构建三元组。
【讨论】:
我强烈建议使用moment.js library 来获取与时间和日期相关的 Javascript 代码。
在这种情况下,您可以通过运行获得ISO 8601 格式的UTC 偏移量:
> moment().format("Z")
> "-08:00"
【讨论】: