gpt4 book ai didi

javascript - 如何在 Javascript 中格式化给定时区的日期?

转载 作者:行者123 更新时间:2023-12-03 06:32:12 25 4
gpt4 key购买 nike

我有一个带有时区的 ISO 时间戳:

> let datestring = "2016-07-15T09:20:32.730689-04:00";

我想将其格式化为人类可读的格式,例如“Jul 15 2016, 09:20”,同时保留时区。

我首先尝试了这个:

> new Date(datestring).toString()
"Fri Jul 15 2016 15:20:32 GMT+0200 (CEST)"
> new Date(datestring).toISOString()
"2016-07-15T13:20:32.730Z"

当然,这不能满足我的要求,因为 new Date() 仅存储自纪元以来的毫秒数,并且 -04:00 时区在解析后被删除。好的。

我还了解到:

  • toString() 格式使用 w/r/t 我的本地时区,格式类似于 asctime
  • toISOString() 使用 ISO 8601 中的格式来格式化 w/r/t UTC。

看起来都没有帮助,所以让我们看看这些库。

<小时/>

接下来我尝试的是时刻:

> moment(datestring)._tzm
-240

好的,Moment 不会丢失我约会对象的时区!太好了,我希望我可以使用一个 moment 对象,就像 Python 中的一个感知 datetime 对象一样。那么如何格式化它呢?

> moment(datestring).toString()
"Fri Jul 15 2016 15:20:32 GMT+0200"
> moment(datestring).toISOString()
"2016-07-15T13:20:32.730Z"

哦,这些看起来像是 Moment 刚刚将请求转发到了日期时间。那么让我们尝试一下:

moment(datestring).format("MMM D YYYY, HH:mm")
"Jul 15 2016, 15:20"

格式看起来不错,但是这个 15:20 是什么?哦,那是我本地时间。看起来 format() 还假设我想忽略日期时间的解析时区偏移量,并且我更喜欢本地时区。这里运气不好。

但是有 moment().utcOffset 允许我指定给定的时区偏移量:

> let m = moment(datestring)
> m.utcOffset(m._tzm).format("MMM D YYYY, HH:mm")
"Jul 15 2016, 09:20"

是的,它有效!但是我没有在任何地方看到这个 _tzm 记录,看起来我现在正在搞乱 moment 内部结构。

<小时/>

实现这一目标的“常规”方法是什么?

假设我对 iso 格式没问题,这可以在没有 moment 的情况下在 vanilla js 中完成吗?

最佳答案

我认为您正在寻找 parseZone功能:

let datestring = "2016-07-15T09:20:32.730689-04:00";
let m = moment.parseZone(datestring);

m.hour(); // 9
m.format("MMM D YYYY, HH:mm"); // "Jul 15 2016, 09:20"

默认情况下,时刻将使用本地时区,但如果您使用parseZone,那么它将使用输入字符串的时区。

关于javascript - 如何在 Javascript 中格式化给定时区的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38397872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com