我如何告诉 momentjs/moment-tz 我给它的字符串已经在我给它的时区中?

问题描述

让我抓狂的小问题。我从 API 调用中以字符串形式获取时间,并且以两个单独的字符串形式获取时间所在的时区。我正在尝试创建一个使用此给定数据的时刻,并将我的本地机器时区作为起点并调整到给定区域

let timeFromApi = "01 Jan 2021 15:00";             //That's 3pm,Eastern Standard Time
let timeZoneFromApi = "America/Indianapolis";     //Server says "time I gave is in EST"

如果我执行其中任何一项,并将本地计算机设置为 UTC:

let x = moment.tz(timeFromApi,timeZoneFromApi).format("YYYY-MM-DDTHH:mm:ss zz");
let y = moment(timeFromApi).tz(timeZoneFromApi).format("YYYY-MM-DDTHH:mm:ss zz");

然后它们最终都包含“2021-01-01 10:00 -05”..

Moment 似乎假设给定的字符串在本地机器所在的时区中:如果我将本地机器设置为 EST,那么我得到“2021-01-01 15:00 -05”,就像我期望的那样......

...但我根本不想读取本地机器时间。我真的想给它一个时间,给它一个时区,让它在那个时区创建那个时间 - 我该怎么做?

解决方法

经历过同样的麻烦,我可以告诉你

let x = moment.tz(timeFromApi,timeZoneFromApi);

是正确的方法。 documentation 也表示这就是方法。我怀疑您的问题是格式而不是解析。 zzz 格式选项自 1.6 起已弃用(请参阅 https://momentjs.com/docs/#/displaying/)。所以我会稍微调整一下格式。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...