如何使用 JavaScript 将 JSON 结果转换为日期?

什么是 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 标准格式。