JSON中正确的日期格式是什么?
JSON中正确的日期格式是什么?
技术背景
JSON(JavaScript Object Notation) 本身并没有规定日期的表示格式,这就导致在实际应用中存在多种表示日期的方式。在不同的系统交互和数据传输中,选择合适的日期格式对于数据的处理至关重要。
实现步骤
使用ISO 8601格式
ISO 8601 是一种国际标准的日期和时间表示方法,其常见格式为 YYYY-MM-DDTHH:mm:ss.sssZ
,例如 2012-04-23T18:25:43.511Z
。许多现有的日期库都能很好地处理这种格式。在JavaScript中,Date
对象的 toJSON
方法默认使用 toISOString
方法,会输出符合ISO 8601格式的日期字符串。
1 |
|
利用 reviver
参数自动转换
可以借助 JSON.parse
的 reviver
参数将ISO 8601 字符串自动转换为 JavaScript 的 Date
对象。
1 |
|
其他日期格式及特点
时间戳(毫秒数)
表示自 1970 年 1 月 1 日以来的毫秒数,可轻松传递给 new Date()
构造函数,是便携性较高的格式。然而,由于闰秒实现的差异,使用这种格式可能存在风险。
EJSON 格式
格式为 { "myDateField": { "$date" : <ms-since-epoch> } }
,具有解析性能高、无需日期验证、类型声明明确等优点,适用于需要保证数据类型无误的通用传输场景。
自定义对象模型
可以使用包含年、月、日、时、分、秒和时区等字段的对象来表示日期,虽然更冗长,但具有人类可读、支持时区和更小时间单位、无需单独解析等优势。
1 |
|
最佳实践
- 若能够控制 JSON 数据的生成,建议选择 ISO 8601 格式,因其通用性强,许多编程语言都能处理。
- 若不能控制生成的 JSON 格式,可编写日期解析工具函数来处理不同格式。
常见问题
闰秒问题
使用基于纪元的时间戳(秒或毫秒数)时,由于闰秒的随机实现,发送方和接收方可能对闰秒的处理不同,导致时间不准确。
日期验证问题
即使字符串符合 ISO 8601 格式,也可能不是有效的日期。使用 EJSON 格式可避免此问题。
JSON中正确的日期格式是什么?
https://119291.xyz/posts/what-is-the-right-json-date-format/