import dayjs from 'dayjs'; /** * Calculates the elapsed time between two dates and returns a formatted string representing the duration. * * @param {string | null | undefined} begin - The starting date. * @param {string | null | undefined} end - The ending date. * @return {string} The formatted elapsed time string. */ export const elapsedTime = (begin?: string | null, end?: string | null): string => { if (begin === undefined || begin === null) { return '--'; } const beginDate = dayjs(begin); const endDate = end === undefined || end === null ? dayjs() : dayjs(end); if (!beginDate.isValid() || !endDate.isValid()) { return '--'; } const timestamp = endDate.valueOf() - beginDate.valueOf(); if (timestamp < 0) { return '时间有误'; } const duration = dayjs.duration(timestamp); const years = duration.years(); const months = duration.months(); const days = duration.days(); const hours = duration.hours(); const minutes = duration.minutes(); const seconds = duration.seconds(); if (years !== 0) { return `${years}年${months}个月`; } if (months !== 0) { return `${months}个月${days}天`; } if (days !== 0) { return `${days}天${hours}小时`; } if (hours !== 0) { return `${hours}小时${minutes}分`; } return `${minutes}分${seconds}秒`; }; /** * 是否是有效的日期 * * @param {Date} date - The date to check. * @return {boolean} True if the date is valid, false otherwise. */ export const isValidDate = (date: Date): boolean => { if (date instanceof Date) { return !Number.isNaN(date.getTime()); // valueOf() 也可以 } return false; }; /** * 能否使用 dayjs 转换成 Date * * @param {Date | string | number | null | undefined} date - The date to be checked. * @return {boolean} Returns true if the date can be converted to a valid Date object, otherwise returns false. */ export const canBeConvertToDate = (date?: Date | string | number | null): boolean => { if (date === undefined || date === null || date === '') { return false; } const convertedDate = dayjs(date); return convertedDate.isValid(); }; /** * 转换日期 * * @param {Date | string | number | null | undefined} date - The date to format. * @param {string} [format='YYYY-MM-DD HH:mm:ss'] - The format string to use. * @return {string} The formatted date string. */ export const formatDate = ( date: Date | string | number | null | undefined, format: string = 'YYYY-MM-DD HH:mm:ss', ): string => { if (date === undefined || date === null || date === '') { return '--'; } const convertedDate = dayjs(date); if (!convertedDate.isValid()) { return '--'; } return convertedDate.format(format); };