JS根据任意字符串通过指定格式配置字符串例如yyyy年MM月dddd日转为日期类型Date
可以使用正则表达式和字符串替换来实现。具体步骤如下:
-
定义一个正则表达式,匹配字符串中的年、月、日等格式字符,并将其替换为对应的日期值。例如,将'yyyy'替换为四位年份,将'MM'替换为两位月份,将'dddd'替换为中文星期几等。
-
使用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 著作权归作者所有。请勿转载和采集!