import moment from 'moment';
import 'moment/locale/zh-cn'; // 导入中文语言包
import 'moment/locale/en-gb'; // 导入英文语言包
import { useTranslation } from 'react-i18next';
/**
* 语言代码映射表
* node_modules/moment/locale
*/
const languageMap = {
'zh-CN': 'zh-cn',
'en-US': 'en',
// 添加其他语言映射
};
/**
* 时间格式映射表,包含不同精度的格式
*/
const formatMap = {
'zh-CN': {
full: 'YYYY-MM-DD HH:mm:ss',
minute: 'YYYY-MM-DD HH:mm',
hour: 'YYYY-MM-DD HH',
day: 'YYYY-MM-DD',
},
'en-US': {
full: 'MM/DD/YYYY HH:mm:ss',
minute: 'MM/DD/YYYY HH:mm',
hour: 'MM/DD/YYYY HH',
day: 'MMM D, YYYY',
},
// 添加其他语言格式映射
};
/**
* 检查日期是否有效
* @param {string|Date} date - 要验证的日期
* @returns {boolean} - 如果日期有效,则返回 true,否则返回 false
*/
const isValidDate = (date) => {
return moment(date).isValid();
};
/**
* 格式化日期
* @param {string|Date} date - 要格式化的日期
* @param {string} language - 当前的语言代码
* @param {string} format - 时间精度类型:'full' | 'minute' | 'hour' | 'day'
* @returns {string} - 格式化后的日期字符串
*/
const formatDate = (date, language, format = 'full') => {
if (!isValidDate(date)) {
console.warn('错误的日期:', date);
return ''; // 返回空字符串或根据需求返回默认值
}
const formats = formatMap[language] || formatMap['zh-CN']; // 如果语言不匹配,默认使用中文格式
const dateFormat = formats[format] || formats['full']; // 默认使用 'full' 格式
// 动态设置 moment 的语言
const momentLocale = languageMap[language] || 'zh-cn'; // 根据映射表获取 moment 支持的语言代码
moment.locale(momentLocale);
try {
return moment(date).format(dateFormat);
} catch (error) {
console.error('日期格式化失败:', error);
return '-'; // 返回空字符串或根据需求返回默认值
}
};
/**
* 时间格式化函数,支持根据国际化设置切换格式
* @param {string|Date} date - 要格式化的日期
* @param {string} [format='full'] - 时间精度类型:'full' | 'minute' | 'hour' | 'day'
* @returns {string} - 格式化后的日期字符串
*/
const format = ({ date, format = 'minute' }) => {
const { i18n } = useTranslation();
const language = i18n?.language || 'zh-CN'; // 默认使用中文
const formattedDate = formatDate(date, language, format);
return formattedDate;
};
export default format;