可以使用正则表达式和字符串替换来实现。具体步骤如下:

  1. 定义一个正则表达式,匹配字符串中的年、月、日等格式字符,并将其替换为对应的日期值。例如,将'yyyy'替换为四位年份,将'MM'替换为两位月份,将'dddd'替换为中文星期几等。

  2. 使用Date构造函数,将替换后的字符串作为参数创建一个日期对象。

下面是一个实现示例:

function parseDateString(dateString, format) {
  var year, month, day, weekday;

  // 定义正则表达式,匹配年、月、日、星期几等格式字符
  var regex = /yyyy|yy|MM|M|dd|d|HH|H|mm|m|ss|s|dddd|ddd/g;

  // 定义替换函数,根据匹配到的格式字符替换为对应的日期值
  function replaceFn(match) {
    switch (match) {
      case 'yyyy': // 四位年份
        year = dateString.slice(0, 4);
        return year;
      case 'yy': // 两位年份
        year = dateString.slice(2, 4);
        return year;
      case 'MM': // 两位月份
        month = parseInt(dateString.slice(5, 7), 10) - 1;
        return month < 9 ? '0' + (month + 1) : month + 1;
      case 'M': // 一位或两位月份
        month = parseInt(dateString.slice(5, 7), 10) - 1;
        return month + 1;
      case 'dd': // 两位日期
        day = parseInt(dateString.slice(8, 10), 10);
        return day < 10 ? '0' + day : day;
      case 'd': // 一位或两位日期
        day = parseInt(dateString.slice(8, 10), 10);
        return day;
      case 'HH': // 两位小时数
        return dateString.slice(11, 13);
      case 'H': // 一位或两位小时数
        return parseInt(dateString.slice(11, 13), 10);
      case 'mm': // 两位分钟数
        return dateString.slice(14, 16);
      case 'm': // 一位或两位分钟数
        return parseInt(dateString.slice(14, 16), 10);
      case 'ss': // 两位秒数
        return dateString.slice(17, 19);
      case 's': // 一位或两位秒数
        return parseInt(dateString.slice(17, 19), 10);
      case 'dddd': // 中文星期几
        weekday = ['日', '一', '二', '三', '四', '五', '六'];
        return '星期' + weekday[new Date(dateString).getDay()];
      case 'ddd': // 中文星期几(简写)
        weekday = ['日', '一', '二', '三', '四', '五', '六'];
        return '周' + weekday[new Date(dateString).getDay()];
    }
  }

  // 将格式字符串中的格式字符替换为日期值
  var dateStr = format.replace(regex, replaceFn);

  // 使用Date构造函数创建日期对象
  var date = new Date(dateStr);

  return date;
}

// 示例用法
var dateString = '2022-03-08 14:30:00';
var format = 'yyyy年MM月dd日 dddd HH:mm:ss';
var date = parseDateString(dateString, format);
console.log(date); // 输出:Tue Mar 08 2022 14:30:00 GMT+0800 (中国标准时间)
``

原文地址: https://www.cveoy.top/t/topic/fI0X 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录