Momentjs 显示多个时区的同一时间
Momentjs showing the same time for multiple time zones
所以我试图获取不同的时区,并且我已经设置了时间,但是,所有时区都显示相同的时间。
这是我的代码:
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>
由于您没有为 Moment Timezone 加载时区,因此您需要添加每个要使用的时区。
要添加所有时区,您只需加载以下文件:
<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>
您很可能在后台遇到以下错误,它不会阻止显示格式化日期,但不会添加时区偏移量:
moment-timezone.min.js:1 Moment Timezone has no data for Etc/GMT+0. See http://momentjs.com/timezone/docs/#/data-loading/.
使用前需要加载moment.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
,但这些时区的符号是颠倒的,所以它实际上是 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>
"POSIX 兼容性要求反转偏移量。因此,Etc/GMT-X 的偏移量为 +X,而 Etc/GMT+X 的偏移量为 -X。这是 IANA 时区数据库的结果,而不是 Moment.js 的任意选择。因此,使用基于位置的标识符优于固定偏移标识符。
例如,moment().tz('Etc/GMT+1').format('YYYY-MM-DD HH:mm ZZ') 将 return 2014-12-18 11:22 -0100 而 moment( ).tz('Europe/Madrid').format('YYYY-MM-DD HH:mm ZZ') 将 return 2014-12-18 13:22 +0100。应该使用 Europe/Madrid 标识符而不是 Etc/GMT+1 标识符。"
基本上,您应该使用城市名称标识符而不是 Etc/GMT+1 标识符。
Here is a link 到您应该使用的时区标识符。
所以我试图获取不同的时区,并且我已经设置了时间,但是,所有时区都显示相同的时间。
这是我的代码:
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>
由于您没有为 Moment Timezone 加载时区,因此您需要添加每个要使用的时区。 要添加所有时区,您只需加载以下文件:
<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>
您很可能在后台遇到以下错误,它不会阻止显示格式化日期,但不会添加时区偏移量:
moment-timezone.min.js:1 Moment Timezone has no data for Etc/GMT+0. See http://momentjs.com/timezone/docs/#/data-loading/.
使用前需要加载moment.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
,但这些时区的符号是颠倒的,所以它实际上是 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>
"POSIX 兼容性要求反转偏移量。因此,Etc/GMT-X 的偏移量为 +X,而 Etc/GMT+X 的偏移量为 -X。这是 IANA 时区数据库的结果,而不是 Moment.js 的任意选择。因此,使用基于位置的标识符优于固定偏移标识符。
例如,moment().tz('Etc/GMT+1').format('YYYY-MM-DD HH:mm ZZ') 将 return 2014-12-18 11:22 -0100 而 moment( ).tz('Europe/Madrid').format('YYYY-MM-DD HH:mm ZZ') 将 return 2014-12-18 13:22 +0100。应该使用 Europe/Madrid 标识符而不是 Etc/GMT+1 标识符。"
基本上,您应该使用城市名称标识符而不是 Etc/GMT+1 标识符。
Here is a link 到您应该使用的时区标识符。