日期格式转换函数
这是一个日期格式转换函数,核心功能是将
YYYYMMDD格式的字符串转换为带分隔符的日期(如2023-12-25)。主要特点:
- 支持自定义分隔符(
-、/等)- 自动清理输入中的非数字字符
- 空值返回可配置的占位符(默认
---)- 严格校验8位数字格式
典型用途:标准化数据库日期、统一不同来源的日期格式等。通过选项对象参数保持扩展性。
支持自定义占位符的 convertDateFormat 函数优化
/**
* 日期格式转换函数
* @param dateString 输入日期字符串
* @param options 配置选项
* @param options.joint 分隔符,默认为'-'
* @param options.placeholder 占位符,默认为'---'
* @param options.inputFormat 输入格式,支持'YYYYMMDD'或'YYYY-MM-DD'等
* @param options.outputFormat 输出格式,支持'YYYY-MM-DD'、'YYYY/MM/DD'、'YYYY年MM月DD日'等
* @returns 格式化后的日期字符串
* @throws 当输入格式不符合要求时抛出错误
*/
export function convertDateFormat(
dateString: string,
options: {
joint?: string;
placeholder?: string;
inputFormat?: 'YYYYMMDD' | 'YYYY-MM-DD';
outputFormat?: 'YYYY-MM-DD' | 'YYYY/MM/DD' | 'YYYY年MM月DD日';
} = {}
): string {
// 解构配置选项,设置默认值
const {
joint = '-',
placeholder = '---',
inputFormat = 'YYYYMMDD',
outputFormat = 'YYYY-MM-DD'
} = options;
if (!dateString) return placeholder;
// 根据输入格式清理输入字符串
let cleanedDateString: string;
if (inputFormat === 'YYYY-MM-DD') {
// 验证带分隔符的格式
const dateParts = dateString.split(/[-/]/);
if (dateParts.length !== 3) {
throw new Error('日期格式错误,不符合YYYY-MM-DD格式');
}
cleanedDateString = dateParts.join('');
} else {
// 默认处理无分隔符格式
cleanedDateString = dateString.replace(/\D/g, '');
}
// 验证输入长度
if (cleanedDateString.length !== 8) {
throw new Error('日期格式错误,处理后不是8位数字');
}
// 提取年月日部分
const year = cleanedDateString.slice(0, 4);
const month = cleanedDateString.slice(4, 6);
const day = cleanedDateString.slice(6, 8);
// 根据输出格式返回结果
switch (outputFormat) {
case 'YYYY/MM/DD':
return `${year}/${month}/${day}`;
case 'YYYY年MM月DD日':
return `${year}年${month}月${day}日`;
case 'YYYY-MM-DD':
default:
return `${year}${joint}${month}${joint}${day}`;
}
}
主要优化点
- 支持自定义占位符:通过
placeholder选项可以自定义空值时的占位符 - 更灵活的配置:将所有选项合并到一个
options对象参数中,提高可扩展性 - 更好的类型提示:使用 TypeScript 接口定义选项参数
使用示例
示例1:自定义占位符
convertDateFormat('', { placeholder: '无日期' }); // 返回: '无日期'
示例2:完整配置
convertDateFormat('20231225', {
joint: '/',
placeholder: '日期未知',
outputFormat: 'YYYY/MM/DD'
}); // 返回: '2023/12/25'
示例3:默认配置
convertDateFormat('20231225'); // 返回: '2023-12-25'
convertDateFormat(''); // 返回: '---'
示例4:中文格式与自定义占位符
convertDateFormat(null, {
outputFormat: 'YYYY年MM月DD日',
placeholder: '暂无日期'
}); // 返回: '暂无日期'
参数说明
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| dateString | string | - | 要转换的日期字符串 |
| options | object | {} | 配置选项对象 |
| options.joint | string | '-' | 日期部分之间的分隔符 |
| options.placeholder | string | '---' | 当输入为空时的占位文本 |
| options.inputFormat | 'YYYYMMDD'、 'YYYY-MM-DD' | 'YYYYMMDD' | 输入日期的格式 |
| options.outputFormat | 'YYYY-MM-DD'、'YYYY/MM/DD'、'YYYY年MM月DD日' | 'YYYY-MM-DD' | 输出日期的格式 |
使用建议
- 当需要处理可能为空的日期时,使用
placeholder选项提供友好的占位显示 - 对于多语言应用,可以通过
placeholder和outputFormat实现本地化日期显示 - 使用对象参数形式可以提高代码可读性,特别是需要配置多个选项时