moment.js时区中的.tz()不能正确转换时区

时间:2016-11-08 10:59:26

标签: javascript angularjs date datetime momentjs

使用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相同,如图所示:

enter image description here

我已经阅读了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,或者一小时前进。有人在这段代码中看到了奇怪的东西吗?

0 个答案:

没有答案