使用moment.js从时区转换为时区时遇到问题。
这是我的代码:
convertSelectedTimeZoneToClients() {
let timeZoneInfo = {
usersTimeZone: this.$rootScope.mtz.tz.guess(),
utcOffset: this.formData.timeZone.offset,
selectedDateTime: this.toJSONLocal(this.formData.sessionDate) + " " + this.formData.sessionTime
};
let utcTime = this.$rootScope.mtz.utc(timeZoneInfo.selectedDateTime).utcOffset(timeZoneInfo.utcOffset).format("YYYY-MM-DD HH:mm");
let con = this.$rootScope.mtz.tz(utcTime, timeZoneInfo.usersTimeZone).format();
return con;
}
用户从客户端页面上的下拉菜单中选择日期,时间和时区。 在timeZoneInfo对象中,我存储usersTimeZone(我希望能够转换用户在页面上选择的时区并将其转换为当地时区)。
例如用户选择:11/08/2016 01:30和UTC + 2时区,他的时区是UTC + 1,比我想在标签上显示他:那是11/08/2016 00:30自UTC与UTC + 2时区相比,+1是-1小时。
我在一个对象中存储时区的偏移量,并且这些值是硬编码的(utcOffset: this.formData.timeZone.offset
)。
在我将时间形式时区转换为时区之前,我执行此操作:获取时区 - >转换为UTC时间 - >转换为用户时区。
正在发生的事情是utcTime变量具有正确的值。但是当我将该值和用户时区传递给.tz()函数并使用format()获取一些可读值时,我得到的时间与utcTime相同,如图所示:
我已经阅读了moment.js文档,并且通过它们.tz()。format()应该可以完成工作,但是你可以看到我的结果是:2016-11-08T23:30:00 + 01:00。 所以它应该增加1小时,但如何获得:2016-11-09T00:30而不是?
我试过.format(" YYYY-MM-DD HH:mm")以及同样的问题。当我使用应该从utc时间转换到指定时区的.local()函数时,会出现同样的问题。
我错了吗?我很确定当你从2016-11-08T23:30 UTC转换为UTC + 1时,它应该是2016-11-09T00:30,或者一小时前进。有人在这段代码中看到了奇怪的东西吗?