Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 保留时间,但转换到另一个时区_Javascript_Datetime_Timezone_Momentjs - Fatal编程技术网

Javascript 保留时间,但转换到另一个时区

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的偏移量(取

我正在开发一个应用程序,允许用户在其他时区创建日期/事件,因此我需要转换如下内容

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').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();

当然可以,但它会失去精确度,而且可能会在不同的日历日期结束。