Javascript 使用矩(timezone.js)从用户浏览器获取时区

Javascript 使用矩(timezone.js)从用户浏览器获取时区,javascript,momentjs,angular-moment,Javascript,Momentjs,Angular Moment,在使用矩.js和矩-timezone.js时,获取客户端时区并将其转换为其他时区的最佳方法是什么 我想知道客户的时区是什么,然后把他的日期和时间转换成其他时区 有人有这方面的经验吗 var timedifference = new Date().getTimezoneOffset(); 这将返回客户端时区与UTC时间的差值。 然后,您可以随心所欲地使用它。使用moment.js时,请使用: var tz = moment.tz.guess(); 它将返回IANA时区标识符,如美国太平洋时区的

在使用矩.js和矩-timezone.js时,获取客户端时区并将其转换为其他时区的最佳方法是什么

我想知道客户的时区是什么,然后把他的日期和时间转换成其他时区

有人有这方面的经验吗

var timedifference = new Date().getTimezoneOffset();
这将返回客户端时区与UTC时间的差值。
然后,您可以随心所欲地使用它。

使用moment.js时,请使用:

var tz = moment.tz.guess();
它将返回IANA时区标识符,如美国太平洋时区的
America/Los_Angeles

是的

在内部,它首先尝试使用以下调用从浏览器获取时区:

Intl.DateTimeFormat().resolvedOptions().timeZone
如果您只针对支持此功能的现代浏览器,并且您不需要任何其他功能的即时时区,那么您可以直接调用它


如果矩时区没有从该函数中获得有效的结果,或者该函数不存在,那么它将通过对
日期
对象测试几个不同的日期和时间来“猜测”时区,以查看其行为。猜测通常是一个足够好的近似值,但不能保证精确匹配计算机的时区设置。

所有当前答案都提供当前时间而不是给定日期的偏差

moment(date).utcOffset()
返回浏览器时间和UTC在作为参数传递的日期之间的时差(如果未传递日期,则返回今天)

下面是一个函数,用于解析拾取日期的正确偏移量:

function getUtcOffset(date) {
  return moment(date)
    .subtract(
      moment(date).utcOffset(), 
      'minutes')
    .utc()
}

您还可以使用以下JS代码获得想要的时间:

new Date(`${post.data.created_at} GMT+0200`)

在本例中,我收到的日期为GMT+0200时区。相反,它可以是每个时区。返回的数据将是您所在时区的日期。希望这将有助于任何人节省时间

使用瞬间库,查看他们的网站->

我注意到他们也在自己的网站上使用自己的库,所以在安装之前,您可以尝试使用浏览器控制台


获取用户时区的最佳方法是使用

const time = moment.tz(response.timestamp)
const localtz = moment.tz.guess()
const date = time.clone().tz(localtz)

这样,您就可以将时间转换为本地时区特定的时间

这将返回当前时区偏移量。不是时区。偏移量可以根据夏令时等情况进行更改。请参阅@MattJohnson答案中的“时区!=偏移量”,这才是该问题的真实答案。从技术上讲,这个答案是不正确的,因为它与偏移量有关,而与时区无关(不同的概念)。这在Firefox中不起作用,new Date()在UTC时区中创建了一个日期对象,因此在其上获取TimeZoneOffset()是毫无意义的,所以我们如何利用矩来处理它?很好的答案-投票赞成!另外,请使用
momet时区
0.5.4版或更高版本。。。请按照此线程进一步解释+1。确保您的使用时间与日期,以利用tz挂钩。要使用node.js安装它,请使用此命令
npm install moment timezone
然后像下面这样要求它
window.moment=require('moment-timezone')
时区是从浏览器还是从设备获取的?@bubble-它是从代码在哪个环境中执行的。@Scaramouche-这与此处询问的内容无关。请不要重复旧的评论,而是提出新的问题。(简短回答-不,您仍然不能)函数实际上是
utcOffset()
,而不是
offsetUtc()
:)@Milkncookiez,我更新了答案。非常感谢。不知道我是如何颠倒它们的(这可能是一个双向工作的情况,或者在以前的版本中被更改的情况-我发布我没有测试过的东西的概率接近于
null
)。现在,自“时刻”停止以来。检查没有任何库的超简单单行程序。
const time = moment.tz(response.timestamp)
const localtz = moment.tz.guess()
const date = time.clone().tz(localtz)