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

时间:2018-12-19 21:18:50

标签: 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 - 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'

这是我所看到的:

image

对于加载,我只是使用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>

4 个答案:

答案 0 :(得分:4)

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

<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>

答案 1 :(得分:3)

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

  

moment-timezone.min.js:1 Moment时区没有Etc / GMT + 0的数据。参见http://momentjs.com/timezone/docs/#/data-loading/

您需要先使用th加载时区,然后再使用。例如,洛杉矶:

moment.tz.add()

答案 2 :(得分:2)

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

MM用于月份,但您要查找的是mm的分钟。

您还需要注意这些Etc/GMT-X时区中的标志。您为旧金山指定了Etc/GMT-8,但这些时区的符号却相反,所以实际上是Etc/GMT+8(这是使用时区名称更好的另一个原因)。

例如:

const sf = moment().tz('America/Los_Angeles').format('HH:mm');
const sfetc = moment().tz('Etc/GMT+8').format('HH:mm');

console.log(sf);
console.log(sfetc);
<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-with-data.js"></script>

答案 3 :(得分:1)

这是来自moment timezone docs

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

例如,moment()。tz('Etc / GMT + 1')。format('YYYY-MM-DD HH:mm ZZ')将返回2014-12-18 11:22 -0100 ).tz('Europe / Madrid')。format('YYYY-MM-DD HH:mm ZZ')将返回2014-12-18 13:22 +0100。应该使用Europe / Madrid缩进词代替Etc / GMT + 1标识符。“

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

Here is a link到您应该使用的时区标识符。