如何将 Moment.js 日期转换为用户本地时区?

2022-01-16 00:00:00 date timezone javascript momentjs

我使用 Moment.js 和 Moment-Timezone 框架,并且有一个 Moment.js 日期对象,该对象明确使用 UTC 时区.如何将其转换为浏览器的当前时区?

I use the Moment.js and Moment-Timezone frameworks, and have a Moment.js date object which is explicitly in UTC timezone. How can I convert that to the current timezone of the browser?

var testDateUtc = moment.tz("2015-01-30 10:00:00", "UTC");var localDate = ???

所以如果我能找出用户的本地时区就好了;或者,我想将日期对象转换为另一个只使用本地时区"的数据对象,无论它实际上是什么.

So it would be fine if I could find out the users local time zone; or alternatively I'd like to convert the date object into another data object which just uses the "local timezone", no matter what that actually is.

推荐答案

您不需要为此使用 moment-timezone.主要的 moment.js 库具有使用 UTC 和本地时区的完整功能.

You do not need to use moment-timezone for this. The main moment.js library has full functionality for working with UTC and the local time zone.

var testDateUtc = moment.utc("2015-01-30 10:00:00");
var localDate = moment(testDateUtc).local();

从那里您可以使用您可能期望的任何功能:

From there you can use any of the functions you might expect:

var s = localDate.format("YYYY-MM-DD HH:mm:ss");
var d = localDate.toDate();
// etc...

请注意,通过将 testDateUtc(它是一个 moment 对象)传回 moment() 构造函数,它会创建一个 克隆.否则,当您调用 .local() 时,它也会更改 testDateUtc 值,而不仅仅是 localDate 值.时刻是可变的.

Note that by passing testDateUtc, which is a moment object, back into the moment() constructor, it creates a clone. Otherwise, when you called .local(), it would also change the testDateUtc value, instead of just the localDate value. Moments are mutable.

另外请注意,如果您的原始输入包含时区偏移量,例如 +00:00Z,那么您可以直接使用 moment 解析它.您不需要使用 .utc.local.例如:

Also note that if your original input contains a time zone offset such as +00:00 or Z, then you can just parse it directly with moment. You don't need to use .utc or .local. For example:

var localDate = moment("2015-01-30T10:00:00Z");

相关文章