gpt4 book ai didi

javascript - MomentJS:为什么 format() 和 toISOString() 会产生不同的结果?

转载 作者:行者123 更新时间:2023-12-02 15:15:01 26 4
gpt4 key购买 nike

根据文档,moment 方法 toISOString()format() 都生成根据 ISO 8601 格式化的字符串。但是,这两种方法产生的字符串都与另一种方法不同。例如:

时刻("2015-12-31T10:28:41+01:00").toISOString()

产量

“2015-12-31T09:28:41.000Z”

moment("2015-12-31T10:28:41+01:00").format()

产量

“2015-12-31T10:28:41+01:00”

这是为什么,这些字符串在所有计算环境下都完全等效吗?

最佳答案

toISOString 函数模仿 Date 对象的 toISOString 函数,因为它在格式化之前将所有值转换为 UTC,然后使用 Z 字符表示 UTC。

format 函数本身不执行任何转换。它依赖于 moment 对象所处的状态来确定使用哪个时区偏移。

format 函数还接受参数来控制字符串表示形式。不传递参数时,默认为ISO8601扩展格式带偏移

从实际 Angular 来看,请注意,在 UTC 模式下调用时,format 将使用 +00:00,而不是 ZtoISOString 使用。 ISO8601 允许其中任何一种,但 Z 特别指示 UTC,而 +00:00 也可能来自当时恰好与 GMT 对齐的时区。例如,英国在冬季使用 +00:00,在夏季使用 +01:00

还认识到 ISO8601 涵盖许多不同的格式,包括:

  • 标准时间戳格式YYYYMMDDTHHMMSSZ
  • 扩展时间戳格式YYYY-MM-DDTHH:MM:SSZ
  • 标准格式和扩展格式的显式偏移版本
  • 标准格式和扩展格式的无时区版本
  • 标准格式和扩展格式的仅日期和仅时间版本
  • 基于周数的格式
  • 持续时间/周期格式

还值得注意的是RFC3339将此限制为扩展时间戳格式,不允许无时区形式,并允许与 ISO8601 的一些细微偏差。

.format().toISOString() 均符合 RFC3339 标准。

哦,你的例子有点不对劲。 moment("2015-12-31T10:28:41+01:00").format() 只会产生 "2015-12-31T10:28:41+01:00" 如果本地时区恰好匹配。否则,该值将转换为本地时区,显示该时区的相关偏移量。如果您想保留输入偏移量而不管本地时区如何,请使用:

moment.parseZone("2015-12-31T10:28:41+01:00").format()

关于javascript - MomentJS:为什么 format() 和 toISOString() 会产生不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34544264/

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