Javascript 保留时间,但转换到另一个时区
我正在开发一个应用程序,允许用户在其他时区创建日期/事件,因此我需要转换如下内容 2014-12-01T19:00:00.000Z到任何特定时区,如“美国/凤凰城” 我正在利用这个时刻来处理它:Javascript 保留时间,但转换到另一个时区,javascript,datetime,timezone,momentjs,Javascript,Datetime,Timezone,Momentjs,我正在开发一个应用程序,允许用户在其他时区创建日期/事件,因此我需要转换如下内容 2014-12-01T19:00:00.000Z到任何特定时区,如“美国/凤凰城” 我正在利用这个时刻来处理它: moment.tz(dt, 'America/New_York').format(); 这输出:2014-12-01T14:00:00-05:00这不是我想要的 我想做的就是更改时区,而不是更改时间,使其成为2014-12-01T19:00:00-05:00 也许我可以在转换时区之前添加5的偏移量(取
moment.tz(dt, 'America/New_York').format();
这输出:2014-12-01T14:00:00-05:00这不是我想要的
我想做的就是更改时区,而不是更改时间,使其成为2014-12-01T19:00:00-05:00
也许我可以在转换时区之前添加5的偏移量(取决于时区),使其保持不变?也许有更好的办法
谢谢,詹姆斯。你可以使用力矩法,如:
moment.tz(dt, 'America/New_York').startOf('day').hour(dt.get('hour')).minute(dt.get('minutes')).format()
这将打印与dt变量相同的小时和分钟
希望对您有所帮助您应该认识到字符串中的
Z
表示时间戳应解释为UTC。因此,如果您将其更改为不同的偏移,而不相应地调整时间,那么实际上您选择的是不同的时间点。通常,这样做是不对的
通过调整时间以匹配时区的偏移量,Moment正在做正确的事情。它将输入字符串解释为UTC,然后将其调整为提供的时区
听起来您想忽略Z
,并将时间视为已经在特定时区中。更改的最佳位置是最初生成字符串的位置。如果不是UTC,则不应将Z
放在第一位的末尾
然而,您当然可以在JavaScript中去掉它,并得到您想要的结果
var s = "2014-12-01T19:00:00.000Z";
moment.tz(s.replace(/Z$/,''), 'America/New_York').format();
当然可以,但它会失去精确度,而且可能会在不同的日历日期结束。