Merge pull request #935 from zhbdesign/patch-21

优化消息时间显示月日时分
This commit is contained in:
程序员阿江-Relakkes 2026-07-02 15:42:06 +08:00 committed by GitHub
commit c9ad1efbb0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 18 additions and 8 deletions

View File

@ -1,7 +1,6 @@
import { Check, Copy, GitFork } from 'lucide-react'
import { useTranslation } from '../../i18n'
import { useSettingsStore } from '../../stores/settingsStore'
import { formatExactMessageTimestamp, formatMessageTimestamp } from '../../lib/formatMessageTimestamp'
import { formatExactMessageTimestamp, formatMessageHoverTime } from '../../lib/formatMessageTimestamp'
import { CopyButton } from '../shared/CopyButton'
export type MessageBranchAction = {
@ -25,11 +24,10 @@ export function MessageActionBar({
align = 'start',
timestamp,
}: Props) {
const t = useTranslation()
const locale = useSettingsStore((state) => state.locale)
const hasCopy = Boolean(copyText?.trim())
const timeLabel = typeof timestamp === 'number'
? formatMessageTimestamp(timestamp, t, locale)
const hoverTimeLabel = typeof timestamp === 'number'
? formatMessageHoverTime(timestamp, locale)
: ''
const exactTimeLabel = typeof timestamp === 'number'
? formatExactMessageTimestamp(timestamp, locale)
@ -69,12 +67,12 @@ export function MessageActionBar({
<GitFork size={13} strokeWidth={2.2} aria-hidden="true" />
</button>
) : null}
{timeLabel ? (
{hoverTimeLabel ? (
<span
className="ml-1 inline-flex items-center text-[11px] font-medium tabular-nums text-[var(--color-text-tertiary)]"
title={exactTimeLabel || timeLabel}
title={exactTimeLabel || hoverTimeLabel}
>
{timeLabel}
{hoverTimeLabel}
</span>
) : null}
</div>

View File

@ -46,6 +46,18 @@ export function formatExactMessageTimestamp(value: number | string | Date, local
}).format(date)
}
export function formatMessageHoverTime(
value: number | string | Date,
locale: Locale,
now = Date.now(),
): string {
const date = coerceDate(value)
if (!date) return ''
return isSameLocalYear(date, new Date(now))
? formatMonthDayTime(date, locale)
: formatYearMonthDayTime(date, locale)
}
function coerceDate(value: number | string | Date): Date | null {
const date = value instanceof Date ? value : new Date(value)
return Number.isFinite(date.getTime()) ? date : null