借助dayjs,把各种类型的日期转换成“YYYY-MM-DD“格式

记得先 npm install datajs

<template>
  <div class="home">

  </div>
</template>
<script lang="ts" setup>
import { reactive, ref } from "vue";

import dayjs from "dayjs";
import customParseFormat from "dayjs/plugin/customParseFormat";

// 导入自定义解析格式插件
dayjs.extend(customParseFormat);

// 原始日期数组
const dates = [
  "2023-12-31",
  "2023-12",
  "2022/11/30",
  "2021/10/29",
  "2020年9月01日",
  "2020年1月",
  "2020-10-01",
  "2020-9-1",
  "2021-0-10",
  "1999-10-0",
  "1979-0-0",
  "1979-0",
  "2020/10/01",
  "2020/10",
  "2029",
  "2020/1/1",
  "2020年十月一日",
  "2020年十月1日",
  "2020年11月1日",
  "2020年十月",
  "2020年",
  "19世纪",
  "十三世纪",
  "十八世纪70年代",
  "20世纪70年代",
  "19世纪三十年代",
  "二十世纪90年代",
  "三十世纪四十年代",
  "17世纪70年代",
  "十九世纪90年代",
  "十二世纪十九年代",
];

const chineseNumberMap = {
  一: 1,
  二: 2,
  三: 3,
  四: 4,
  五: 5,
  六: 6,
  七: 7,
  八: 8,
  九: 9,
  十: 1,
};
// 转换为相同格式的日期数组
const formattedDates = dates.map((date) => {
  let oldDate = date;
  // 把0月0日转为1月1日;
  date = date.replace(/-0-/g, "-1-").replace(/-0$/, "-1");
  let parsedDate;

  // 此处解决 中文数量转成数字 会多一个零的问题  比如十九世纪会转成109
  if (date.indexOf("世纪") > 0) {
    chineseNumberMap["十"] = 0;
  } else {
    chineseNumberMap["十"] = 10;
  }

  // 将中文数字转换为阿拉伯数字
  date = date.replace(/[一二三四五六七八九十]+/g, (match) => {
    let number = "";
    for (let i = 0; i < match.length; i++) {
      number += chineseNumberMap[match[i]];
    }
    return number;
  });
  // 尝试解析日期字符串
  if (date.match(/^\d{4}-\d{2}-\d{2}$/)) {
    parsedDate = dayjs(date, "YYYY-MM-DD", true);
  } else if (date.match(/^\d{4}\/\d{2}\/\d{2}$/)) {
    parsedDate = dayjs(date, "YYYY/MM/DD", true);
  } else if (date.match(/^\d{4}年\d{2}月\d{2}日$/)) {
    parsedDate = dayjs(date, "YYYY年MM月DD日", true);
  } else if (date.match(/^\d{4}年十月一日$/)) {
    parsedDate = dayjs(date, "YYYY年十月一日", true);
  } else if (date.match(/^\d{4}年十月\d{1,2}日$/)) {
    parsedDate = dayjs(date, "YYYY年十月DD日", true);
  } else if (date.match(/^\d{4}年\d{1,2}月\d{1,2}日$/)) {
    parsedDate = dayjs(date, "YYYY年MM月DD日", true);
  } else if (date.match(/^\d{4}年十月$/)) {
    parsedDate = dayjs(date, "YYYY年十月", true);
  } else if (date.match(/^\d{4}年$/)) {
    parsedDate = dayjs(date, "YYYY年", true);
  } else if (date.includes("世纪") || date.includes("年代")) {
    // if (date.includes("世纪")) {
    //   const centuryMatch = date.match(/(\d+)世纪/);
    //   if (centuryMatch) {
    //     const century = parseInt(centuryMatch[1]);
    //     const startYear = (century - 1) * 100 + 1;
    //     parsedDate = dayjs(`${startYear}-01-01`, "YYYY-MM-DD");
    //   }
    // } else if (date.includes("年代")) {
    //   const decadeMatch = date.match(/(\d+)年代/);
    //   if (decadeMatch) {
    //     const decade = parseInt(decadeMatch[1]);
    //     const startYear = decade * 10 - 9;
    //     parsedDate = dayjs(`${startYear}-01-01`, "YYYY-MM-DD");
    //   }
    // }
    // 世纪和年代拼接为年 由于中文数量转阿拉伯数字  十的转换 问题,如果二者有小于10则+10
    // 太low了不会写
    let century;
    let decade;
    if (date.includes("世纪")) {
      const centuryMatch = date.match(/(\d+)世纪/);
      if (centuryMatch) {
        century = parseInt(centuryMatch[1]);
        century = century - 1;

        if (century < 10) {
          century = century + 10;
        }
      }
    }
    if (date.includes("年代")) {
      const decadeMatch = date.match(/(\d+)年代/);
      if (decadeMatch) {
        decade = parseInt(decadeMatch[1]);
        if (decade < 10) {
          decade = decade + 10;
        }
      }
    }

    let startYear = century + "" + (decade ? decade : "00");
    // console.log("century", century);
    // console.log("decade", decade);
    // console.log("startYear", startYear);

    parsedDate = dayjs(`${startYear}-01-01`, "YYYY-MM-DD");
  } else {
    parsedDate = dayjs(date, true);
  }
  // 设置dayjs转换规则
  if (!parsedDate.isValid()) {
    // Handle non-standard date formats
    parsedDate = dayjs(date, [
      "YYYY-MM-DD",
      "YYYY/MM/DD",
      "YYYY/M/D",
      "YYYY年MM月DD日",
      "YYYY/MM",
      "YYYY",
      "YYYY年MM月",
      "YYYY年",
      "YYYY年M月D日",
      "YYYY年M月",
    ]);
  }
  console.log(
    oldDate + "-------------------" + parsedDate.format("YYYY-MM-DD")
  );
  return parsedDate.format("YYYY-MM-DD");
});

// console.log("------------------------");
// console.log(formattedDates);

</script>

<style lang="scss">
</style>

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

助力智能人群检测计数,基于YOLOv7开发构建通用场景下人群检测计数识别系统

在一些人流量比较大的场合&#xff0c;或者是一些特殊时刻、时段、节假日等特殊时期下&#xff0c;密切关注当前系统所承载的人流量是十分必要的&#xff0c;对于超出系统负荷容量的情况做到及时预警对于管理团队来说是保障人员安全的重要手段&#xff0c;本文的主要目的是想要…

LED恒流调节器FP7126:引领LED照明和调光的新时代(调光电源、汽车大灯)

目录 一、FP7126概述 二、FP7126功能 三、应用领域 随着科技的进步&#xff0c;LED照明成为了当代照明产业的主力军。而在LED照明的核心技术中&#xff0c;恒流调节器是不可或缺的组成部分。今天&#xff0c;我将为大家介绍一款重要的恒流调节器FP7126&#xff0c;适用于LED…

Axure的案例演示

增删改查&#xff1a; 在中继器里面展示照片

App(Android)ICP备案号查询——————高仿微信

&#x1f604; 个人主页&#xff1a;✨拉莫帅-CSDN博客✨&#x1f914; 博文&#xff1a;132篇&#x1f525; 原创&#xff1a;130篇&#xff0c;转载&#xff1a;2篇&#x1f525; 总阅读量&#xff1a;388923❤️ 粉丝量&#xff1a;112&#x1f341; 感谢点赞和关注 &#x…

什么是集成测试?它和系统测试的区别是什么? 操作方法来了

01 什么是集成测试&#xff1f; 集成测试是软件测试的一种方法&#xff0c;用于测试不同的软件模块之间的交互和协作是否正常。集成测试的主要目的是确保不同的软件模块能够无缝协作&#xff0c;形成一个完整的软件系统&#xff0c;并且能够满足系统的需求和规格。 在集成测试…

Qt Q_DECL_OVERRIDE

Q_DECL_OVERRIDE也就是C的override&#xff08;重写函数&#xff09;&#xff0c;其目的就是为了防止写错虚函数,在重写虚函数时需要用到。 /* 鼠标按下事件 */ void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; 参考: Qt Q_DECL_OVERRIDE - 一杯清酒邀明月 - 博客…

Android Studio问题解决:Gradle Download 下载超时 Connect reset

文章目录 一、遇到问题二、解决办法 一、遇到问题 Gradle Download下载超时Sync了很多次&#xff0c;一直失败 二、解决办法 手动通过gradle网站下载 https://gradle.org/releases/可能也会出现超时&#xff0c;最好开个VPN软件会比较快。 下载好的软件&#xff0c;放到本机的…

管理类联考——数学——真题篇——按题型分类——充分性判断题——蒙猜D

先看目录&#xff0c;除了2018年比较怪&#xff0c;其他最多2个D&#xff08;数学只有两个弟弟&#xff0c;一个大弟&#xff0c;一个小弟&#xff09; 文章目录 2023真题&#xff08;2023-16&#xff09;-D 2022真题&#xff08;2022-21&#xff09;-D-分析选项⇒是否等价⇒是…

使用极狐gitlab初始化导入本地项目

本地有项目的情况需要同步到极狐gitlab上 第一步&#xff1a; 在gitlab上新创建一个空项目 ⚠️⚠️⚠️这里需要注意红色圈住的地方一定不要选择&#xff0c;因为选择了这个后续会有不必要的麻烦 第二步 在本地项目中删除原来的.git文件(这一步如果是新项目可以忽略&#…

扑克牌炸金花

1.创建类 使用权限修饰符定义所需要参数&#xff0c;使用this关键字生成方法 public class gamejinhua { private String suit;//花色 private int rank;//数字 public gamejinhua(String suit, int rank) { this.suit suit; this.rank rank; } 2.使用快捷键生成get和…

静态库和动态库

静态库 编译&#xff08;链接&#xff09;时把静态库中相关代码复制到可执行文件中&#xff0c;程序中已包含代码&#xff0c;运行时不再需要静态库 占用更多磁盘和内存空间&#xff0c;但程序运行时无需加载库&#xff0c;运行速度快 升级时&#xff0c;程序需要重新编译链…

WPF仿网易云搭建笔记(7):HandyControl重构

文章目录 专栏和Gitee仓库前言相关文章 新建项目项目环境项目结构 代码结果结尾 专栏和Gitee仓库 WPF仿网易云 Gitee仓库 WPF仿网易云 CSDN博客专栏 前言 最近我发现Material Design UI的功能比较简单&#xff0c;想实现一些比较简单的功能&#xff0c;比如消息提示&#xff0…

电脑风扇控制软件Macs Fan Control mac支持多个型号

Macs Fan Control mac是一款专门为 Mac 用户设计的软件&#xff0c;它可以帮助用户控制和监控 Mac 设备的风扇速度和温度。这款软件允许用户手动调整风扇速度&#xff0c;以提高设备的散热效果&#xff0c;减少过热造成的风险。 Macs Fan Control 可以在菜单栏上显示当前系统温…

HTS318 红外热释传感器处理芯片 PIR控制芯片 用于红外感应灯、走廊灯等

HTS318是一颗高度集成的用于热释电红外传感器 (PIR) 的控制芯片。HTS318单片集成了热释电被动红外移动探测的所有必需组件模拟前端可以直接与模拟型PIR探测器使用电容连接&#xff0c;内置3V LDO&#xff0c;给PIR探测器供电。内置高精度模数转换器&#xff0c;可将探测器信号转…

漏刻有时数据可视化Echarts组件开发(45)机场流程导航线和指示点的开发记录

路径线 ECharts中的路径线是指用于连接起点和终点的线。在ECharts中&#xff0c;路径图主要用于带有起点和终点信息的线数据的绘制&#xff0c;如地图上的航班、路线等。路径线可以用于展示数据点之间的连接关系&#xff0c;以及数据点之间的相对位置。 {//路径图name: 路线图…

宣布推出 ML.NET 3.0

作者&#xff1a;Jeff Handley 排版&#xff1a;Alan Wang ML.NET 是面向 .NET 开发人员的开源、跨平台的机器学习框架&#xff0c;可将自定义机器学习模型集成到 .NET 应用程序中。ML.NET 3.0 版本现已发布&#xff0c;其中包含大量新功能和增强功能&#xff01; 此版本中的深…

智能优化算法应用:基于学校优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于学校优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于学校优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.学校优化算法4.实验参数设定5.算法结果6.…

Jmeter实现性能测试--高并发

高并发场景 高并发场景是指系统在相对短时间内面对大量用户同时访问的情况。这种场景常见于在线服务、电商平台、社交网络、金融交易等需要处理大量并发请求的系统。以下是一些典型的高并发场景&#xff1a; 在线购物活动&#xff1a; 在特定促销或购物节期间&#xff0c;电商…

飞天使-k8s-知识点1-kubernetes架构简述

文章目录 名词功能要点 k8s核心要素CNCF 云原生框架简介k8s组建介绍 名词 CI 持续集成, 自动化构建和测试&#xff1a;通过使用自动化构建工具和自动化测试套件&#xff0c;持续集成可以帮助开发人员自动构建和测试他们的代码。这样可以快速检测到潜在的问题&#xff0c;并及早…

STM32 RTC总结

RTC入侵检测Tamper RTC Tamper功能就是&#xff0c;MCU在Tamper管脚检测到一个指定边缘信号&#xff08;可配置&#xff09;时&#xff0c;就主动清除所有备份寄存器数据的功能。如果需要&#xff0c;可以使能Tamper中断&#xff0c;在每次检测到Tamper信号后执行指定代码。 在…