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

发布时间:2023年12月19日

记得先 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>

在这里插入图片描述

文章来源:https://blog.csdn.net/weixin_43073383/article/details/135093024
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。