date - 时刻解析区域给出了意想不到的结果
问题描述
const input = '02/02/1700 12:30'
const inputFormat = ['DD/MM/YYYY HH:mm']
const displayFormat = 'YYYY-MM-DDTHH:mm:ss'
console.log(moment(input, inputFormat, true))
console.log(moment(input, inputFormat, true).format())
console.log(moment.utc(input, inputFormat, true))
console.log(moment.utc(input, inputFormat, true).format())
console.log(moment.parseZone(input, inputFormat, true))
console.log(moment.parseZone(input, inputFormat, true).format())
console.log(moment.tz(input, inputFormat, true, 'Asia/Hong_Kong'))
console.log(moment.tz(input, inputFormat, true, 'Asia/Hong_Kong').format())
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.27.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.31/moment-timezone-with-data.min.js"></script>
https://jsfiddle.net/y9gtvbdn/
上面的例子 parseZone 给出的结果与 input1700-02-02T12:29:18Z
不同'02/02/1700 12:30'
。任何人都可以向我解释这个吗?
解决方案
一些东西:
- 不要
moment
直接登录。始终使用输出函数,例如format
- 当您在 Moment 中解析时,Moment 在内部调用
Date
对象的 setter。由于您没有通过秒或毫秒,因此永远不会调用设置器。如果您确实有几秒钟,您会看到它们按预期设置为零。 - 他们不在这种情况下的原因是存在一个长期存在的浏览器错误,其中
Date
对象构建在1883-11-18T12:03:57.999Z
. 请参阅此评论和相关问题。这不是一个瞬间错误,而是一个 JavaScript 浏览器的怪癖。这仅对非常早的日期很重要。 parseZone
专门用于当输入中包含时区偏移量时使用 - 数字-07:00
或 aZ
(表示 UTC)。您的示例输入字符串都没有。
推荐阅读
- go - 为什么 Go 中的作业会创建副本?
- reactjs - 在反应中使用材质 UI 的 Hook 调用无效
- c# - 如何验证 lambda 授权程序中的端点
- html - 如何解决这个简单的 Aurelia CSS 问题?
- rsa - 将解码的 pkcs12 密钥转换为 pem 格式
- mysql - SQL 命令错误/外键问题
- python - 使用字典中给出的单词出现更新数据框的单元格
- javascript - 如何使用 HTML 和 Javascript 在没有按钮的情况下更改背景图像
- extension-methods - OnAfterOpenSolution 和 OnAfterOpenProject 未触发,将扩展升级到 Visual Studio 2022
- python - 满足 PyDispatcher-2.0.5 的要求(来自版本:无)