借助 moment 组件
export function formatTimeRange(start, end) {
const startMoment = moment(start)
const endMoment = moment(end)
if (!startMoment.isValid() || !endMoment.isValid()) {
return '无效的日期'
}
const dateFormat = 'YYYY.MM.DD'
const timeFormat = 'HH:mm'
if (startMoment.isSame(endMoment, 'day')) {
return `${startMoment.format(dateFormat)} ${startMoment.format(timeFormat)} ~ ${endMoment.format(timeFormat)}`
} else if (startMoment.isSame(endMoment, 'year') && startMoment.isSame(endMoment, 'month')) {
return `${startMoment.format(dateFormat)} ${startMoment.format(timeFormat)} ~ ${endMoment.format(`MM.DD ${timeFormat}`)}`
} else if (startMoment.isSame(endMoment, 'year')) {
return `${startMoment.format(dateFormat)} ${startMoment.format(timeFormat)} ~ ${endMoment.format(`MM.DD ${timeFormat}`)}`
} else {
return `${startMoment.format(dateFormat)} ${startMoment.format(timeFormat)} ~ ${endMoment.format(dateFormat)} ${endMoment.format(timeFormat)}`
}
}
js 原生
function formatTimeRange(start, end) {
const startDate = new Date(start);
const endDate = new Date(end);
if (isNaN(startDate) || isNaN(endDate)) {
return '无效的日期';
}
const padZero = (num) => (num < 10 ? '0' + num : num);
const formatDate = (date) => `${date.getFullYear()}.${padZero(date.getMonth() + 1)}.${padZero(date.getDate())}`;
const formatTime = (date) => `${padZero(date.getHours())}:${padZero(date.getMinutes())}`;
if (startDate.toDateString() === endDate.toDateString()) {
return `${formatDate(startDate)} ${formatTime(startDate)} ~ ${formatTime(endDate)}`;
} else if (startDate.getFullYear() === endDate.getFullYear() && startDate.getMonth() === endDate.getMonth()) {
return `${formatDate(startDate)} ${formatTime(startDate)} ~ ${padZero(endDate.getDate())}.${padZero(endDate.getMonth() + 1)} ${formatTime(endDate)}`;
} else if (startDate.getFullYear() === endDate.getFullYear()) {
return `${formatDate(startDate)} ${formatTime(startDate)} ~ ${padZero(endDate.getDate())}.${padZero(endDate.getMonth() + 1)} ${formatTime(endDate)}`;
} else {
return `${formatDate(startDate)} ${formatTime(startDate)} ~ ${formatDate(endDate)} ${formatTime(endDate)}`;
}
}
const start1 = '2024-10-25T14:00:00';
const end1 = '2024-10-25T16:30:00';
const start2 = '2024-10-20T14:00:00';
const end2 = '2024-10-25T16:30:00';
const start3 = '2024-10-20T14:00:00';
const end3 = '2025-10-25T16:30:00';
const start4 = '2024-10-20T14:00:00';
const end4 = '2024-11-20T16:30:00';
console.log(formatTimeRange(start1, end1));
console.log(formatTimeRange(start2, end2));
console.log(formatTimeRange(start3, end3));
console.log(formatTimeRange(start4, end4));