7

我在 GMT 时区偏移计算中遇到了一些意想不到的结果。

我正在使用 ExtJS 日期类来帮助计算消息从 GMT 0 的服务器到达当前为 GMT +8 的用户本地计算机的时间。

我认为如果我计算了偏移量,然后以秒为单位将其添加到时间戳中,那么我可以使用以下计算来给我一个字符串以随意格式化。

var d = new Date((stamp + offset) * 1000);

stamp 是以秒为单位的日期/时间,偏移量也是如此。

这将返回我所在位置的当前日期和时间,但加上 8 小时。如果我不添加偏移量,那么时间是正确的。

方法 new Date() 会自动给我当地时间的日期/时间吗?

4

3 回答 3

7

只需插入一个包含千分之一秒的 unix 时间戳。该 unix 时间戳应该是 UTC 0 并且 javascript 将查找客户端计算机的本地时区并进行计算。

正如您在链接后面看到的那样,有一些 UTC 方法可以为您提供没有本地时间偏移的时间。也许这可能是您搜索的内容(如果您真的想自己设置时区)。

编辑:

new Date().getTimezoneOffset()将向您展示本地时区和 utc 之间的差异,但您应该考虑使用 utc 方法。

于 2013-01-03T07:32:34.853 回答
7

只需添加它以防其他人看起来更晚。可能是错误的,但可以满足我的需要。

我以秒为单位存储了用户的偏移量。

以秒为单位假设的偏移量更改(offset * 1000)以确保如果您的偏移量不是以秒为单位,则偏移量被转换为毫秒。

function offsetDate(offset){
            var d = new Date(new Date().getTime() + (offset * 1000));
            var hrs = d.getUTCHours();
            var mins = d.getUTCMinutes();
            var secs = d.getUTCSeconds();
            //simple output
            document.write(hrs + ":" + mins + ":" + secs);
于 2014-09-25T14:00:16.887 回答
1

从外观上看,stamp是您的本地时间,包括时区偏移量。JavaScript 不知道服务器的时区,它(主要)是一种客户端语言。

于 2013-01-03T07:20:04.403 回答