使用偏移量计算 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 日期时间的主要内容,如果未能解决你的问题,请参考以下文章
Mongo ObjectID:即使使用 pytz,“也无法比较原始偏移量和可感知偏移量的日期时间”
javascript toISOString()忽略时区偏移量
列类型 TIMESTAMP 的 BigQuery 导入转换日期时间偏移量/时区,但列类型 DATETIME 失败并显示“无效的日期时间字符串”