javascript 使用moment.js Timezone设置起始时区并转换为其他时区

9ceoxa92  于 2023-03-06  发布在  Java
关注(0)|答案(1)|浏览(167)

我正在执行https://www.alex-arriaga.com/how-to-set-moment-js-timezone-when-creating-a-date/中的一个示例,但没有得到预期的结果。我的startDateAndTimeString将时间设置为08:00,并将时区设置为CST中的Mexico_City。然后我尝试转换为New_York(EST)和Los_Angeles(PST)时间。
如果开始时间是08:00 CST,那么应该是09:00 EST和06:00 PST,但我看到的是05:00 PST和08:00 EST。在本地,我处于EST,如果我没有将开始时间设置为CST,这是有意义的。当我处于EST时,我可以不将开始时间设置为CST吗?

var startDateAndTimeString = '2023-03-05 08:00:00';

// CST
var startDateAndTime = moment(startDateAndTimeString).tz('America/Mexico_City');

function formatDateToAnotherTimezone(anotherTimezone, startDateAndTime) {
 return moment(startDateAndTime).tz(anotherTimezone).format('ha z');
}

var est = formatDateToAnotherTimezone('America/New_York',startDateAndTime);
var pst = formatDateToAnotherTimezone('America/Los_Angeles',startDateAndTime);

console.log(est)
console.log(pst)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data.min.js"></script>
m1m5dgzv

m1m5dgzv1#

我认为这不是使用www.example.com的正确方法moment.tz

为了方便起见,我打印出了墨西哥时区的GMT时间(用startDateAndTime表示)。
您可以看到,第一个console.log打印了错误的答案。
但是当我们正确调用www.example.com时,第二个console.log会打印正确的答案。moment.tz correctly, the second console.log prints the right answer.
后续调整使用正确的startDateAndTime值。

var startDateAndTimeString = '2023-03-05 08:00:00';

// CST
var wrongStartDateAndTime = moment(startDateAndTimeString).tz('America/Mexico_City');
console.log("wrongStartDateAndTime",wrongStartDateAndTime)

startDateAndTime = moment.tz(startDateAndTimeString,'America/Mexico_City');
console.log("When we instead use moment.tz correctly:")
console.log("startDateAndTime",startDateAndTime)

function formatDateToAnotherTimezone(anotherTimezone, startDateAndTime) {
  return moment(startDateAndTime).tz(anotherTimezone).format('ha z');
}

var est = formatDateToAnotherTimezone('America/New_York', startDateAndTime);
var pst = formatDateToAnotherTimezone('America/Los_Angeles', startDateAndTime);

console.log(est)
console.log(pst)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data.min.js"></script>

相关问题