Javascript Momentjs显示多个时区的相同时间

Javascript Momentjs显示多个时区的相同时间,javascript,momentjs,moment-timezone,Javascript,Momentjs,Moment Timezone,所以我试着得到不同的时区,我设置了时间,但是,所有的时区都显示相同的时间 这是我的密码: const format = 'HH:MM' // San Francisco - Time let sanFrancisco = moment().tz('Etc/GMT-8').format(format) document.querySelector('.sanFrancisco').innerHTML = sanFrancisco + ' GMT-8'; // Mexico City - Tim

所以我试着得到不同的时区,我设置了时间,但是,所有的时区都显示相同的时间

这是我的密码:

const format = 'HH:MM'

// San Francisco - Time
let sanFrancisco = moment().tz('Etc/GMT-8').format(format)
document.querySelector('.sanFrancisco').innerHTML = sanFrancisco + ' GMT-8';

// Mexico City - Time
let mexicoCity = moment().tz('Etc/GMT-6').format(format)
document.querySelector('.mexicoCity').innerHTML = mexicoCity + ' GMT-6'

// New York City - Time
let newYorkCity = moment().tz('Etc/GMT-5').format(format)
document.querySelector('.newYork').innerHTML = newYorkCity + ' GMT-5'

// Montréal - Time
let montreal = moment().tz('Etc/GMT-5').format(format)
document.querySelector('.montreal').innerHTML = montreal + ' GMT-5'

// London - Time
let london = moment().tz('Etc/GMT+0').format(format)
document.querySelector('.london').innerHTML = london + ' GMT+0'
以下是我看到的:

至于加载,我只是使用CDN,如:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone.min.js"></script>

由于您没有在“时刻时区”中加载时区,因此需要添加每个要使用的时区。 要添加所有时区,只需加载以下文件:

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data.js"></script>

而不是:

 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone.min.js"></script>

您很可能在后台遇到以下错误,它不会阻止显示格式化日期,但不会添加区域偏移:

矩时区.min.js:1矩时区没有Etc/GMT+0的数据。看

在使用时区之前,需要使用
矩.tz.add()
加载时区。以洛杉矶为例:

moment.tz.add('America/Los_Angeles|PST PDT|80 70|0101|1Lzm0 1zb0 Op0');
let kobe = moment().tz('America/Los_Angeles').format(format)

您需要将格式从
'HH:MM'
更改为
'HH:MM'

MM
表示月份,但您要查找的分钟数是
MM

您还需要小心这些
Etc/GMT-X
时区中的标志。您为旧金山指定了<代码> Etc /GMT-8/COD>,但这些时区的符号被反转,所以它确实是代码> ETC/GMT+8 (这只是使用时区名称的另一个原因)。

例如:

const sf=moment().tz('America/Los_Angeles')。格式('HH:mm');
常数sfetc=moment().tz('Etc/GMT+8')。格式('HH:mm');
控制台日志(sf);
控制台日志(sfetc)

这是来自

“POSIX兼容性要求偏移量是反向的。因此,Etc/GMT-X的偏移量为+X,Etc/GMT+X的偏移量为-X。这是IANA时区数据库的结果,而不是Moment.js的任意选择。因此,使用基于位置的标识符优于固定偏移标识符

例如,矩().tz('Etc/GMT+1')。格式('YYYY-MM-DD HH:MM ZZ')将返回2014-12-18 11:22-0100,而矩().tz('Europe/Madrid')。格式('yyyyy-MM-DD HH:MM ZZ')将返回2014-12-18 13:22+0100。应使用欧洲/马德里契约,而不是Etc/GMT+1标识符。”

基本上,您应该使用城市名称标识符,而不是Etc/GMT+1标识符


到您应该使用的时区标识符。

如何加载时刻时区库?您可以发布加载库的HTML标记吗?请参阅问题底部的更新@felipepletsy您的代码看起来正确。如果你下次创建一个JSFIDLE,它将花费更少的时间来帮助你直到不起作用,可能值得注意的是我(现在仍然)在@B.J.B上遇到了这个错误,明白了。那就试着改变时刻时区吧。我已经把答案改对了。