什么是 JSON?
在介绍如何将 JSON 结果转换为日期之前,我们需要先了解什么是 JSON。JSON 是一种轻量级数据交换格式,非常适合于前后端数据交互。它由键值对组成,可以包含对象、数组等数据类型。JSON 的格式书写简洁,易于阅读和解析。
JSON 日期格式
JSON 中的日期格式通常使用 ISO 8601 标准格式,即 yyyy-MM-ddThh:mm:ss.sssZ
,其中:
yyyy
:四位数的年份
MM
:两位数的月份(01 至 12)
dd
:两位数的日期(01 至 31)
T
:代表时间的分隔符
hh
:两位数的小时数(00 至 23)
mm
:两位数的分钟数(00 至 59)
ss.sss
:秒数和毫秒数,小数点后最多可以有三位数字
Z
:代表 UTC 时区的标识符
例如:
"2018-05-13T13:30:00.000Z"
这表示 2018 年 5 月 13 日下午 1:30(UTC 时间)。
将 JSON 日期转换为 JavaScript 日期
在 JavaScript 中,我们可以使用 Date()
构造器将日期字符串转换为日期对象。因为 JSON 中的日期格式符合 ISO 8601 标准,所以可以直接传入日期字符串:
const timestamp = "2017-07-19T08:34:40.500Z";
const DATE = new Date(timestamp);
console.log(DATE); // Wed Jul 19 2017 16:34:40 GMT+0800 (中国标准时间)
这里将 "2017-07-19T08:34:40.500Z"
转换为 JavaScript 中的日期对象。
处理 JSON 中的日期字段
JSON 中,日期字段的格式一般为字符串。我们在前后端交互时,需要将 JSON 数据转换为 JavaScript 对象,然后进行相应的处理。假设有一个 JSON 对象如下:
const data = {
"name": "David",
"age": 20,
"birthday": "1999-02-25T00:00:00.000Z"
};
其中的 "birthday"
字段是一个日期字符串,我们需要将它转换为 JavaScript 中的日期对象。
方法一:使用 JSON.parse() 方法
在 JavaScript 中,我们可以使用 JSON.parse()
方法将 JSON 字符串解析为 JavaScript 对象。解析后的 JavaScript 对象中,日期字段仍然是字符串类型,需要进一步处理。我们可以遍历对象的键值对,如果值符合日期格式,就将它转换为 JavaScript 日期对象。
// 解析 JSON 字符串为 JavaScript 对象
const parsedData = JSON.parse(data);
for (let key in parsedData) {
// 判断属性值是否为日期格式
if (typeof parsedData[key] === 'string' && /\d{4}(-\d{2}){2}T\d{2}(:\d{2}){2}.\d{3}Z/.test(parsedData[key])) {
// 转换为日期对象
parsedData[key] = new Date(parsedData[key]);
}
}
console.log(parsedData.birthday); // Date{ "1999-02-25T00:00:00.000Z" }
这里使用了 JSON.parse()
方法解析 JSON 字符串,并使用正则表达式测试属性值是否为日期格式。如果是,则使用 Date()
构造器将日期字符串转换为日期对象。
方法二:自定义转换函数
如果我们需要对 JSON 数据进行多次转换,或者需要将多个日期字段转换成 JavaScript 日期对象,可以自定义转换函数,将转换逻辑封装起来。
const data = {
"name": "David",
"age": 20,
"birthday": "1999-02-25T00:00:00.000Z"
};
// 自定义转换函数,将日期字符串转换为 JavaScript 日期对象
function convertDateStringsToDates(input) {
for (let key in input) {
if (typeof input[key] === 'string' && /\d{4}(-\d{2}){2}T\d{2}(:\d{2}){2}.\d{3}Z/.test(input[key])) {
input[key] = new Date(input[key]);
}
if (typeof input[key] === 'object') {
convertDateStringsToDates(input[key]);
}
}
}
// 调用自定义转换函数
convertDateStringsToDates(data);
console.log(data.birthday); // Date{ "1999-02-25T00:00:00.000Z" }
这里定义了一个名为 convertDateStringsToDates()
的自定义转换函数,递归遍历对象的所有键值对,并将日期字符串转换为 JavaScript 日期对象。如果属性值是对象,则递归调用函数。
结语
在 JavaScript 中,转换 JSON 中的日期字段为 JavaScript 日期对象可以使用 Date()
构造器或自定义转换函数。此外,在前后端数据交互时,为了避免日期格式的兼容性问题,建议将日期统一转换为 ISO 8601 标准格式。