在时区之间转换似乎仍然使用机器的时区



我正在为我的discord bot编写一个函数,它需要两个输入,以小时为单位的时间和它所在的时区(简化为"美国")。和"eu"。它只能在斯德哥尔摩和芝加哥之间转换。我以为我在用这些设置时间:

var stockholm = new moment({
hour: args[1], // 15
minute: 0,
second: 0,
millisecond: 0,
}).tz("Europe/Stockholm");
console.log(stockholm); // Moment<2021-02-06T15:00:00+01:00>
var chicago = new moment({
hour: args[1], // 15
minute: 0,
second: 0,
millisecond: 0,
}).tz("America/Chicago");
console.log(chicago); // Moment<2021-02-06T08:00:00-06:00>

如果我考虑正确,我希望芝加哥的输出是Moment<2021-02-06T15:00:00-06:00>

下面是我用来将上述其中一个转换为另一个时区的函数:

function zone(mo, newTimeZone) {
console.log(moment(mo).tz(newTimeZone));
return (time = moment(mo).tz(newTimeZone).format("hh:mm z"));
}

根据用户的输入,在这个开关中做什么。

switch (args[0]) {
case "us":
const time = zone(chicago, "Europe/Stockholm");
break;
case "eu":
const time = zone(stockholm, "America/Chicago");
break;
}

此代码适用于从斯德哥尔摩到芝加哥的转换,而不是反过来。我猜这是因为chicago变量没有正确设置,这可能是因为我的本地时区对应于斯德哥尔摩时区。

我不知道mo的格式,但你应该使用mo的格式时间在moment()作为参数,像这样:

function zone(mo, newTimeZone) {
console.log(moment(mo, "HH:mm:ss").tz(newTimeZone));
return (time = moment(mo, "HH:mm:ss").tz(newTimeZone).format("hh:mm z"));
}

最新更新