使用偏移量计算 JavaScript 日期时间

Posted

技术标签:

【中文标题】使用偏移量计算 JavaScript 日期时间【英文标题】:Calculating JavaScript date time with offset 【发布时间】:2012-12-17 13:10:27 【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

您确定stamp 是[您的本地时间] 减去[8 小时]? 你从哪里得到stamp/你是怎么得到它的? 【参考方案1】:

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

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

编辑:

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

【讨论】:

【参考方案2】:

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

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

以秒为单位的偏移量更改(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);

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于使用偏移量计算 JavaScript 日期时间的主要内容,如果未能解决你的问题,请参考以下文章

时区分钟偏移量的 TimeZoneInfo

熊猫滚动窗口和日期时间索引:“偏移”是啥意思?

Mongo ObjectID:即使使用 pytz,“也无法比较原始偏移量和可感知偏移量的日期时间”

javascript toISOString()忽略时区偏移量

将时区偏移量(ISO 8601 格式)添加到原始日期时间

列类型 TIMESTAMP 的 BigQuery 导入转换日期时间偏移量/时区,但列类型 DATETIME 失败并显示“无效的日期时间字符串”