MomentJS设定时区而不改变时间

Ton*_*rix 10 javascript momentjs

我正在尝试在moment.js中设置日期的时区而不更改时间值

我在utc得到一个约会:

date.toString() //Sun Sep 27 2015 00:00:00 GMT+0000

我需要在不改变时间的情况下设置时区.

Sun Sep 27 2015 00:00:00 GMT-0500

如果我使用date.utcOffset(moment().utcOffset())它添加偏移量:

date.toString() //Sat Sep 26 2015 19:00:00 GMT-0500

我可以

date = moment(date.format("YYYYMMDDHHmmssSSSS"), "YYYYMMDDHHmmssSSSS")

但这似乎是一种效率低下的方法.

有没有什么方法可以在不改变时间的情况下改变时区?

Gri*_*inn 12

在撰写本文时(Moment 2.22),您可以someLocalMomentVariable.utc(true)使用someUtcMomentVariable.local(true).


Set*_*ine 8

使用时刻时区,如果您可以识别时区,您也可以通过传递标志来设置它,而无需调整true时间

const tz = "America/New_York"; // GMT-0500
moment(date).tz(tz, true); // true flag identifies not changing time when updating time zone
Run Code Online (Sandbox Code Playgroud)

文档(尽管它没有解释该boolean标志) 转换为区域


Ina*_*him 7

如果您使用的是 moment.js,请使用 utcOffset 和 true 作为第二个参数,例如: date2 = moment(date1).utcOffset('+0400', true)

如果您使用的是矩时区,则可以在第二个参数为真的矩对象上使用 tz 函数,例如: date1 = moment(date1).tz('Asia/Kolkata', true)