保留时间但转换为另一个时区

时间:2014-12-02 11:10:00

标签: 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的偏移量(取决于区域),以便它保持同一时间?也许有更好的方法?

谢谢,詹姆斯

2 个答案:

答案 0 :(得分:1)

您应该认识到字符串中的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();

答案 1 :(得分:0)

您可以使用以下方法:

示例:

moment.tz(dt, 'America/New_York').startOf('day').hour(dt.get('hour')).minute(dt.get('minutes')).format()

这将打印与dt变量相同的小时和分钟。

希望有所帮助