javascript - 我如何告诉 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);
是正确的方法。该文档还说这是这样做的方法。我怀疑你的问题是格式而不是解析。从1.6 开始不推荐使用z
和zz
格式化选项(请参阅https://momentjs.com/docs/#/displaying/)。所以我会稍微调整一下格式。
推荐阅读
- c# - 如何除以 0 不是“除以零”异常?
- batch-file - 将 youtube-dl 命令输出提取到变量
- sql - Postgres 将双精度转换为文本会创建 '1.50000000000'
- html - 无法以水平方式对齐 d-flex 子元素
- google-maps-api-3 - 如何避免谷歌地图中的热图图层相互堆叠
- python - sqlalchemy 使用 sqlite 按日期分组
- javascript - 单击时如何添加特定项目innerText
- reactjs - 当第一个输入值长度为 3 时,如何专注于下一个输入?
- python - 如何访问更改的嵌套字典键?
- terraform - terraform cloud - 不存在具有给定名称的提供程序