将 UTC 时间转换为提供的时区,不得依赖于浏览器时区

Convert UTC time to provided Timezone, must not depend on browser timezone

这种问题以前有人问过,但我遇到的情况有点棘手。 我有一个 UTC 日期时间。无论我们通过什么,我都想将其转换为特定时区。 目前我正在使用时刻时区库。 它会发生什么,它会考虑浏览器时区中提供的时间,然后尝试将其转换为提供的时区。 我想在 UTC 中考虑提供的时间。

js代码:

var datetime = '2015/04/10 15:35:00';
datetime = moment(datetime).format('YYYY-MM-DD HH:mm:ss');
datetime = moment.utc(datetime);
return moment(datetime).tz(siteTimeZone).format('YYYY-MM-DD HH:mm:ss');

我也尝试过直接应用 utc,例如:

var datetime = '2015/04/10 15:35:00';
datetime = moment.utc(datetime).format('YYYY-MM-DD HH:mm:ss');
return moment(datetime).tz(siteTimeZone).format('YYYY-MM-DD HH:mm:ss');

但其中 none 个按预期工作。我可能不清楚时刻时区是如何工作的。

请帮忙。

谢谢!

将您的字符串放入 Date 对象,然后使用 datetime.toUTCString() 从中获取 UTC 字符串,最后设置时区和格式,如下所示:

测试代码如下:

var datetime = new Date('2015/04/10 15:35:00');
datetime = datetime.toUTCString();
datetime = moment(new Date(datetime)).tz(siteTimeZone).format('YYYY-MM-DD HH:mm:ss');

DEMO

在转换为时区之前,只需解析为 utc。

var datetime = '2015/04/10 15:35:00';

return moment.utc(datetime,'YYYY/MM/DD HH:mm:ss')
             .tz(siteTimeZone)
             .format('YYYY-MM-DD HH:mm:ss');

另请注意,我在解析时提供了一个格式字符串,它与传入的值的格式相匹配。这是一个很好的做法,可以防止 moment 在控制台上生成警告。