ECharts中Map(地图)样式配置、渐变色生成

前言

在日常开发中,ECharts 几乎成了我们绘制数据图表的标配工具,功能强大到几乎无所不能。不过每次用的时候都要翻官方文档查配置项,确实有点小繁琐 😅

为了提升效率,也方便以后快速复用,这里就整理记录下我们在实际项目中高频使用的那些配置项和技巧。

又是我,小二,带着满满的干货来了!

📌 官网地址(常备不嫌多):快速上手 - 使用手册 - Apache ECharts

📌 配置项详解(ECharts 的“字典”):Documentation - Apache ECharts

📌 实例演示平台(灵感源泉):makeapie echarts社区图表可视化案例

📌 主题定制器(美化利器):主题编辑器 - Apache ECharts

一起把 ECharts 用得更顺手,让数据“说话”更有说服力!

样式

示例

let option = {tooltip: {show: true,formatter: function (params) {if (params.value.length > 1) {return "  " + params.name + ":" + params.value[2];} else {return "  " + params.name + ":" + (params.value || 0);}},},geo: {map: "china",zoom: 1.2,show: true,roam: false,emphasis: {label: {show: false,},},layoutSize: "100%",itemStyle: {borderColor: "rgba(147, 235, 248, 1)",borderWidth: 2,shadowColor: "rgb(90,160,234)",shadowOffsetX: 0,shadowOffsetY: 10,shadowBlur: 10,},},visualMap: {show: false,seriesIndex: [0],inRange: {color: ["#8db1f1", "#026aa9"],},},series: [{type: "map",map: "china",aspectScale: 0.75,zoom: 1.2,label: {show: true,color: "#ffffff",},itemStyle: {borderColor: "rgba(147, 235, 248, 1)",areaColor: {type: "radial",x: 0.5,y: 0.5,r: 0.9,colorStops: [{offset: 0,color: "rgba(17,217,245,0.5)", // 0% 处的颜色},{offset: 1,color: "rgba(10,209,231,0.2)", // 100% 处的颜色},],globalCoord: false, // 缺省为 false},borderWidth: 1,},emphasis: {label: {show: false,color: "#ffffff",},itemStyle: {areaColor: "#026aa9",borderColor: "#fff",borderWidth: 2,},},data: allData,},],
};

层级

地图的配置是一层盖一层,从底层顶层的配置依次为:

geo => series => visualMap

geoseries 中都有两个配置项

  • itemStyle 未选中的样式
  • emphasis 选中的样式

geo隐藏掉只有series也是能正常显示整个地图的。

geoseries 的搭配可以实现一些阴影,偏移从而实现类似立体的效果。

visualMap

其中visualMap设置的背景颜色是动态的,会根据数值的大小在两个颜色之间变化。

visualMap: {show: false,seriesIndex: [0],inRange: {color: ["#cdcaf8", "#026aa9"],},
},

需要注意的是:

当区域有数据的时候会使用visualMap的颜色覆盖,如果没有数据则会使用seriesitemStyle的样式。

默认最小值和最大值会根据数据自动计算,当然我们也可以指定具体的值。

visualMap: {min: 0,max: 100,inRange: {color: ['#e0ffff', '#0066ff'] // 设置颜色范围,浅色到深色},calculable: true,show: true
},

渐变色

线性渐变

沿着一条直线从一种颜色过渡到另一种颜色。

{type: "linear",x: 0,y: 0,x2: 1,y2: 0,colorStops: [{offset: 0,color: "#8db1f1", // 起始颜色},{offset: 1,color: "#026aa9", // 终止颜色},],
}

径向渐变

从一个中心点向四周辐射的渐变色。

{type: 'radial',x: 0.5, y: 0.5,r: 0.5,colorStops: [{offset: 0, color: 'rgba(255, 0, 0, 1)' // 起始颜色}, {offset: 1, color: 'rgba(0, 0, 255, 1)' // 终止颜色}]
}

你可以设置以下属性:

  1. type:设置渐变的类型,固定值为 ‘radial’。
  2. x、y:设置渐变的中心点坐标,取值范围为 0~1,其中 (0, 0) 表示左上角,(1, 1) 表示右下角。
  3. r:设置渐变的半径,也是相对于整个绘图区域的半径,取值范围为 0~1,1 表示半径等于绘图区域的最短边的一半。
  4. colorStops:设置渐变的起始颜色、终止颜色以及它们的位置。 它是一个数组,每个元素包含两个属性,分别是 offset 和 color。 其中 offset 表示该位置距离渐变位置的百分比,取值范围为 0~1,color 则是该位置所对应的颜色值。

覆盖散点

涟漪散点

series: [{type: "map",map: "china",aspectScale: 0.75,zoom: 1.2,label: {show: true,color: "#11688a",},itemStyle: {areaColor: "rgba(10,76,139,1)",borderColor: "#215495",borderWidth: 1,},emphasis: {label: {show: false,},itemStyle: { areaColor: "#061E3D" },},data: allData,},{type: "effectScatter",coordinateSystem: "geo",rippleEffect: {brushType: "stroke",},showEffectOn: "render",itemStyle: {color: {type: "radial",x: 0.5,y: 0.5,r: 0.5,colorStops: [{offset: 0,color: "rgba(5,80,151,0.2)",},{offset: 0.8,color: "rgba(5,80,151,0.8)",},{offset: 1,color: "rgba(0,108,255,0.7)",},],global: false, // 缺省为 false},},label: {show: true,color: "#fff",fontWeight: "bold",position: "inside",formatter: function (para) {return "{cnNum|" + para.data.value[2] + "}";},rich: {cnNum: {fontSize: 13,color: "#D4EEFF",},},},symbol: "circle",symbolSize: function (val) {if (val[2] === 0) {return 0;}let a = (maxSize4Pin - minSize4Pin) / (max - min);let b = maxSize4Pin - a * max;return a * val[2] + b * 1.2;},data: convertData(allData),zlevel: 1,},
],

其中

let convertData = function (outdata) {let res = [];for (let i = 0; i < outdata.length; i++) {let geoCoord = geoCoordMap[outdata[i].name];if (geoCoord) {res.push({name: outdata[i].name,value: geoCoord.concat(outdata[i].value),});}}return res;
};

值类似于

{name : "河南",value: [113.0668, 33.8818, 140]
}
{type: "scatter",coordinateSystem: "geo",rippleEffect: {brushType: "stroke",},showEffectOn: "render",itemStyle: {color: {type: "radial",x: 0.5,y: 0.5,r: 0.5,colorStops: [{offset: 0,color: "rgba(5,80,151,0.8)",},{offset: 0.5,color: "rgba(0,108,255,0.7)",},{offset: 1,color: "rgba(5,80,151,0.2)",},],global: false, // 缺省为 false},},label: {show: true,color: "#fff",fontWeight: "bold",position: "inside",formatter: function (para) {return "{cnNum|" + para.data.value[2] + "}";},rich: {cnNum: {fontSize: 13,color: "#D4EEFF",},},},symbol: "circle",symbolSize: function (val) {if (val[2] === 0) {return 0;}let a = (maxSize4Pin - minSize4Pin) / (max - min);let b = maxSize4Pin - a * max;return a * val[2] + b * 1.2;},data: convertData(allData),zlevel: 1,
},

放射线

<template><div :class="className" :style="{ height: height, width: width }" />
</template><script>
import * as echarts from "echarts";
import resize from "@/assets/utils/resize.js";
import "@/assets/utils/china.js";export default {name: "BarChart",mixins: [resize],props: {className: {type: String,default: "chart",},width: {type: String,default: "100%",},height: {type: String,default: "100%",},title: {type: String,default: "",},chartData: {type: Object,default: () => {return {};},},},data() {return {chart: null,};},watch: {chartData: function () {this.initChart();},},async mounted() {await this.$nextTick();this.initChart();},beforeDestroy() {if (!this.chart) {return;}this.chart.dispose();this.chart = null;},methods: {initChart() {if (!this.chart) {this.chart = echarts.init(this.$el);}var chinaGeoCoordMap = {黑龙江: [127.9688, 45.368],内蒙古: [110.3467, 41.4899],吉林: [125.8154, 44.2584],北京市: [116.4551, 40.2539],辽宁: [123.1238, 42.1216],河北: [114.4995, 38.1006],天津: [117.4219, 39.4189],山西: [112.3352, 37.9413],陕西: [109.1162, 34.2004],甘肃: [103.5901, 36.3043],宁夏: [106.3586, 38.1775],青海: [101.4038, 36.8207],新疆: [87.9236, 43.5883],西藏: [91.11, 29.97],四川: [103.9526, 30.7617],重庆: [108.384366, 30.439702],山东: [117.1582, 36.8701],河南: [113.4668, 34.6234],江苏: [118.8062, 31.9208],安徽: [117.29, 32.0581],湖北: [114.3896, 30.6628],浙江: [119.5313, 29.8773],福建: [119.4543, 25.9222],江西: [116.0046, 28.6633],湖南: [113.0823, 28.2568],贵州: [106.6992, 26.7682],云南: [102.9199, 25.4663],广东: [113.12244, 23.009505],广西: [108.479, 23.1152],海南: [110.3893, 19.8516],上海: [121.4648, 31.2891],};let chinaDatas = [[{name: "黑龙江",value: 0,},],[{name: "内蒙古",value: 0,},],[{name: "吉林",value: 0,},],[{name: "辽宁",value: 0,},],[{name: "河北",value: 0,},],[{name: "天津",value: 0,},],[{name: "山西",value: 0,},],[{name: "陕西",value: 0,},],[{name: "甘肃",value: 0,},],[{name: "宁夏",value: 0,},],[{name: "青海",value: 0,},],[{name: "新疆",value: 0,},],[{name: "西藏",value: 0,},],[{name: "四川",value: 0,},],[{name: "重庆",value: 0,},],[{name: "山东",value: 0,},],[{name: "河南",value: 0,},],[{name: "江苏",value: 0,},],[{name: "安徽",value: 0,},],[{name: "湖北",value: 0,},],[{name: "浙江",value: 0,},],[{name: "福建",value: 0,},],[{name: "江西",value: 0,},],[{name: "湖南",value: 0,},],[{name: "贵州",value: 0,},],[{name: "广西",value: 0,},],[{name: "海南",value: 0,},],[{name: "上海",value: 1,},],];let allpoints = Object.values(chinaGeoCoordMap);let convertData = function (data) {let res = [];for (let i = 0; i < data.length; i++) {let dataItem = data[i];let fromCoord = chinaGeoCoordMap[dataItem[0].name];let toCoord = allpoints[Math.floor(Math.random() * allpoints.length)];if (fromCoord && toCoord) {res.push([{coord: fromCoord,value: dataItem[0].value,},{coord: toCoord,},]);}}return res;};var series = [];series.push({type: "lines",zlevel: 2,effect: {show: true,period: 4, //箭头指向速度,值越小速度越快trailLength: 0.02, //特效尾迹长度[0,1]值越大,尾迹越长重symbol: "arrow", //箭头图标symbolSize: 5, //图标大小},lineStyle: {normal: {width: 1, //尾迹线条宽度opacity: 1, //尾迹线条透明度curveness: 0.3, //尾迹线条曲直度color: "#17F5FF",},},data: convertData(chinaDatas),},{type: "effectScatter",coordinateSystem: "geo",zlevel: 2,rippleEffect: {//涟漪特效period: 4, //动画时间,值越小速度越快brushType: "stroke", //波纹绘制方式 stroke, fillscale: 4, //波纹圆环最大限制,值越大波纹越大},label: {normal: {show: true,position: "right", //显示位置offset: [5, 0], //偏移设置formatter: function (params) {//圆环显示文字return params.data.name;},fontSize: 10,color: "#FFFFFF",},emphasis: {show: true,},},symbol: "circle",symbolSize: function (val) {return 5 + val[2] * 5; //圆环大小},itemStyle: {normal: {show: false,color: "#17F5FF",},},data: chinaDatas.map(function (dataItem) {return {name: dataItem[0].name,value: chinaGeoCoordMap[dataItem[0].name].concat([dataItem[0].value,]),};}),});let option = {tooltip: {show: false,trigger: "item",backgroundColor: "rgba(166, 200, 76, 0.82)",borderColor: "#FFFFCC",showDelay: 0,hideDelay: 0,enterable: true,transitionDuration: 0,extraCssText: "z-index:100",formatter: function (params) {//根据业务自己拓展要显示的内容var res = "";var name = params.name;var value = params.value[params.seriesIndex + 1];res ="<span style='color:#fff;'>" +name +"</span><br/>数据:" +value || 0;return res;},},geo: {map: "china",zoom: 1.2,label: {emphasis: {show: false,},},roam: false, //是否允许缩放itemStyle: {normal: {color: "rgba(51, 69, 89, .5)", //地图背景色borderColor: "#516a89", //省市边界线00fcff 516a89borderWidth: 1,},emphasis: {color: "rgba(37, 43, 61, .5)", //悬浮背景},},},series: series,};this.chart.setOption(option);},},
};
</script>

背景变色

<template><div :class="className" :style="{ height: height, width: width }" />
</template><script>
import * as echarts from "echarts";
import resize from "@/assets/utils/resize.js";
import "@/assets/utils/china.js";export default {name: "BarChart",mixins: [resize],props: {className: {type: String,default: "chart",},width: {type: String,default: "100%",},height: {type: String,default: "100%",},title: {type: String,default: "",},chartData: {type: Object,default: () => {return {};},},},data() {return {chart: null,};},watch: {chartData: function () {this.initChart();},},async mounted() {await this.$nextTick();this.initChart();},beforeDestroy() {if (!this.chart) {return;}this.chart.dispose();this.chart = null;},methods: {initChart() {if (!this.chart) {this.chart = echarts.init(this.$el);}let dataList = [{name: "重庆",value: 347,},{name: "浙江",value: 59,},{name: "云南",value: 115,},{name: "新疆维吾尔自治区",value: 45,},{name: "香港",value: 81,},{name: "西藏自治区",value: 5,},{name: "天津",value: 121,},{name: "四川",value: 23,},{name: "上海",value: 1140,},{name: "陕西",value: 143,},{name: "山西",value: 77,},{name: "山东",value: 209,},{name: "青海",value: 3,},{name: "宁夏回族自治区",value: 1,},{name: "内蒙古自治区",value: 7,},{name: "辽宁",value: 386,},{name: "江西",value: 67,},{name: "江苏",value: 464,},{name: "湖南",value: 6,},{name: "湖北",value: 614,},{name: "黑龙江",value: 53,},{name: "河南",value: 140,},{name: "河北",value: 190,},{name: "海南",value: 24,},{name: "贵州",value: 2,},{name: "广西壮族自治区",value: 77,},{name: "广东",value: 449,},{name: "甘肃",value: 7,},{name: "福建",value: 23,},{name: "北京",value: 603,},{name: "安徽",value: 29,},];let option = {tooltip: {show: true,formatter: function (params) {if (params.value.length > 1) {return "&nbsp;&nbsp;" + params.name + ":" + params.value[2];} else {return "&nbsp;&nbsp;" + params.name + ":" + (params.value || 0);}},},visualMap: {show: false,seriesIndex: [0],inRange: {color: ["#A5DCF4", "#006edd"],},},geo: {map: "china",zoom: 1.2,show: true,roam: false,label: {emphasis: {show: false,},},layoutSize: "100%",itemStyle: {borderColor: "rgba(147, 235, 248, 1)",borderWidth: 2,shadowColor: "rgba(10,76,139,1)",shadowOffsetY: 0,shadowBlur: 60,},},series: [{type: "map",map: "china",aspectScale: 0.75,zoom: 1.2,label: {normal: {show: true,color: "#4dccff",},emphasis: {show: false,},},itemStyle: {normal: {areaColor: {x: 0,y: 0,x2: 1,y2: 1,colorStops: [{offset: 0,color: "#073684", // 0% 处的颜色},{offset: 1,color: "#061E3D", // 100% 处的颜色},],},borderColor: "#215495",borderWidth: 1,},emphasis: {areaColor: "#061E3D",},},data: dataList,},],};this.chart.setOption(option);},},
};
</script>

无论是数据可视化的新手还是经验丰富的开发者,ECharts 都能成为你探索数据世界的得力助手。希望这些整理的资源和技巧能够帮助你在项目中更高效地运用 ECharts,让你的数据讲述更加生动有力。

记住,每一次的数据展示都是一次与用户的对话。通过精心设计的图表,我们不仅能传递信息,更能激发思考、引导决策。期待你在下一个项目中大放异彩,用你的创意点亮每一个数据故事!

继续加油吧,小伙伴们!如果有任何问题或心得,欢迎随时交流分享。我们都在这条不断进步的路上,共同前行!

—— 小二,在评论区等你们能给提一些优秀的意见!!! 

                让我们鼓励共勉之

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/80981.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内存分配器ptmalloc2、tcmalloc、jemalloc,结构设计、内存分配过程详解

1. 引言 博主之前做过一个高并发内存池的项目实践&#xff0c;在实践中对于内存分配器的内存分配过程理解更加深刻了。在此期间&#xff0c;翻查了不少资料以及博客&#xff0c;发现源码分享的博客不多&#xff0c;能生动完整的讲述ptmalloc2、tcmalloc、jemalloc它们的结构设…

【拥抱AI】Deer-Flow字节跳动开源的多智能体深度研究框架

最近发现一款可以对标甚至可能超越GPT-Researcher的AI深度研究应用&#xff0c;Deer-Flow&#xff08;Deep Exploration and Efficient Research Flow&#xff09;作为字节跳动近期开源的重量级项目&#xff0c;正以其模块化、灵活性和人机协同能力引发广泛关注。该项目基于 La…

openfeign与dubbo调用下载excel实践

一、前言 openfeign和dubbo均是rpc框架 RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;框架 是一种允许程序像调用本地方法一样调用远程服务器上函数的技术。它隐藏了底层网络通信的复杂性&#xff0c;让开发者可以专注于业务逻辑&#xff0c;实现…

解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs-强化学习算法

解密企业级大模型智能体Agentic AI 关键技术&#xff1a;MCP、A2A、Reasoning LLMs-强化学习算法 现在我们的核心问题是有一些同学会知道要才能强化学习。为什么才能强化学习&#xff1f;是实现AGI。例如从这个其实你从第一阶段开始以后&#xff0c;就是chatbot&#xff0c;这…

音频分类的学习

1.深度学习PyTorch入门-语音分类 https://blog.csdn.net/sinat_41787040/article/details/129795496 https://github.com/musikalkemist/pytorchforaudio https://github1s.com/musikalkemist/pytorchforaudio/blob/main/04%20Creating%20a%20custom%20dataset/urbansoundda…

美SEC主席:探索比特币上市证券交易所

作者/演讲者&#xff1a;美SEC主席Paul S. Atkins 编译&#xff1a;Liam 5月12日&#xff0c;由美国SEC加密货币特别工作组发起的主题为《资产上链&#xff1a;TradFi与DeFi的交汇点》系列圆桌会议如期举行。 会议期间&#xff0c;现任美SEC主席Paul S. Atkins发表了主旨演讲。…

Qt file文件操作详解

1.引言 很多应用程序都具备操作文件的能力&#xff0c;包括对文件进行写入和读取&#xff0c;创建和删除文件等等&#xff0c;甚至某些应用程序的就是为了操作文件&#xff0c;像WPS Office。基于此Qt框架中专门提供了对文件操作的类&#xff1a;QFile。 2.QFile文件操作 QF…

【测试开发知识储备】之Jacoco(Java Code Coverage)

文章目录 Jacoco是什么Jacoco的主要功能&#xff08;一&#xff09;多样化覆盖率指标分析&#xff08;二&#xff09; 丰富的报告生成&#xff08;三&#xff09;实时数据收集 Jacoco的工作原理&#xff08;一&#xff09;字节码增强&#xff08;二&#xff09;测试执行与数据收…

Docker 介绍与使用

Docker 文章目录 Docker介绍与虚拟机的比较启动速度占用资源 优势更容易迁移更容易维护更容易扩展 使用场景持续集成提供可伸缩的云服务搭建微服务架构 镜像与容器镜像构成&#xff08;分层结构&#xff09;镜像与容器的区别 安装 Docker常用命令介绍镜像相关容器相关 实战&…

《AI大模型应知应会100篇》第62篇:TypeChat——类型安全的大模型编程框架

第62篇&#xff1a;TypeChat——类型安全的大模型编程框架 摘要 在构建 AI 应用时&#xff0c;一个常见的痛点是大语言模型&#xff08;LLM&#xff09;输出的不确定性与格式不一致问题。开发者往往需要手动解析、校验和处理模型返回的内容&#xff0c;这不仅增加了开发成本&a…

upload-labs通关笔记-第5关 文件上传之.ini绕过

目录 一、ini文件绕过原理 二、源码审计 三、渗透实战 1、查看提示 2、制作.user.ini文件 &#xff08;1&#xff09;首先创建一个文本文件 &#xff08;2&#xff09;保存文件名为.user.ini 2、制作jpg后缀脚本 &#xff08;1&#xff09;创建一个文本文件 &#xf…

为什么 Linux 上默认没有 host.docker.internal

在 Linux 环境中&#xff0c;host.docker.internal 是 Docker 为容器提供的一个特殊 DNS 名称&#xff0c;用于指向宿主机的 IP 地址&#xff08;类似 macOS/Windows 中的行为&#xff09;。但这个功能在 Linux 上默认不启用&#xff0c;需要手动配置才能使用。以下是详细解释和…

C++GO语言微服务和服务发现②

01 创建go-micro项目-查看生成的 proto文件 02 创建go-micro项目-查看生成的main文件和handler ## 创建 micro 服务 命令&#xff1a;micro new --type srv test66 框架默认自带服务发现&#xff1a;mdns。 使用consul服务发现&#xff1a; 1. 初始consul服务发现&…

Redis--常见数据类型List列表

目录 一、概念 二、命令 2.1 LPUSH 2.2 LPUSHX 2.3 RPUSH 2.4 RPUSHX 2.5 LRANGE 2.6 LPOP 2.7 RPOP 2.8 LINDEX 2.9 LINSERT 2.10 LLEN 2.11 阻塞版本命令 三、内部编码 一、概念 列表类型是用来存储多个有序的字符串&#xff0c;列表中的每个字符串称为元素&…

QListWedget控件使用指南

QListWedget公共函数 函数签名功能描述QListWidget(QWidget *parent nullptr)构造函数&#xff0c;创建一个QListWidget对象&#xff0c;可指定父部件&#xff08;默认为nullptr&#xff09;。virtual ~QListWidget()虚析构函数&#xff0c;释放QListWidget对象及其资源。voi…

Seata源码—1.Seata分布式事务的模式简介

大纲 1.Seata分布式事务框架简介 2.Seata AT模式实现分布式事务的机制 3.Seata AT模式下的写隔离机制 4.Seata AT模式下的读隔离机制 5.官网示例说明Seata AT模式的工作机制 6.Seata TCC模式的介绍以及与AT模式区别 7.Seata Saga模式的介绍 8.单服务多个库的分布式事务…

【Qt】之音视频编程2:QtAV的使用篇

QtAV 基本播放控制功能实现&#xff08;C & QML&#xff09; QtAV 提供了完整的播放控制 API&#xff0c;支持 播放、暂停、停止、快进快退、截屏 等功能。以下是具体实现方法&#xff1a; 1. C 控制方式 基本播放控制 #include <QtAV> #include <QtAV/AVPlaye…

歌词滚动效果

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><!-- 设置标签页图标 --><link rel"shortcut icon&…

基于大模型的TIA诊疗全流程智能决策系统技术方案

目录 一、多模态数据融合与预处理系统1.1 数据接入模块1.2 数据预处理伪代码二、TIA智能预测模型系统2.1 模型训练流程2.2 混合模型架构伪代码三、术中智能监测系统3.1 实时监测流程3.2 实时预测伪代码四、智能诊疗决策系统4.1 手术方案推荐流程4.2 麻醉方案生成伪代码五、预后…

Java 日期解析与格式化:从标准格式到自然语言解析

使用 Java 搭配 Apache Commons Lang3 和 Natty 库&#xff0c;实现灵活高效的日期解析与格式化。 一、背景 将不同格式的日期统一成一个格式。日期格式可能有以下几种类型&#xff1a; 标准格式&#xff1a;2024-02-28、14/05/2022、2002年5月6日非英文月份缩写&#xff1a;…