2025-04-18 13:59:12 +08:00
|
|
|
import dayjs from 'dayjs'
|
2025-07-24 10:42:33 +08:00
|
|
|
import relativeTime from 'dayjs/plugin/relativeTime'
|
2025-04-18 13:59:12 +08:00
|
|
|
import { useCallback } from 'react'
|
|
|
|
|
import { useI18N } from '@/context/i18n'
|
2025-09-28 13:37:42 +08:00
|
|
|
import type { Locale } from '@/i18n-config'
|
|
|
|
|
import 'dayjs/locale/de'
|
|
|
|
|
import 'dayjs/locale/es'
|
|
|
|
|
import 'dayjs/locale/fa'
|
|
|
|
|
import 'dayjs/locale/fr'
|
|
|
|
|
import 'dayjs/locale/hi'
|
|
|
|
|
import 'dayjs/locale/id'
|
|
|
|
|
import 'dayjs/locale/it'
|
|
|
|
|
import 'dayjs/locale/ja'
|
|
|
|
|
import 'dayjs/locale/ko'
|
|
|
|
|
import 'dayjs/locale/pl'
|
|
|
|
|
import 'dayjs/locale/pt-br'
|
|
|
|
|
import 'dayjs/locale/ro'
|
|
|
|
|
import 'dayjs/locale/ru'
|
|
|
|
|
import 'dayjs/locale/sl'
|
|
|
|
|
import 'dayjs/locale/th'
|
|
|
|
|
import 'dayjs/locale/tr'
|
|
|
|
|
import 'dayjs/locale/uk'
|
|
|
|
|
import 'dayjs/locale/vi'
|
2025-07-24 10:42:33 +08:00
|
|
|
import 'dayjs/locale/zh-cn'
|
2025-09-28 13:37:42 +08:00
|
|
|
import 'dayjs/locale/zh-tw'
|
2025-07-24 10:42:33 +08:00
|
|
|
|
|
|
|
|
dayjs.extend(relativeTime)
|
2025-04-18 13:59:12 +08:00
|
|
|
|
2025-09-28 13:37:42 +08:00
|
|
|
const localeMap: Record<Locale, string> = {
|
|
|
|
|
'en-US': 'en',
|
|
|
|
|
'zh-Hans': 'zh-cn',
|
|
|
|
|
'zh-Hant': 'zh-tw',
|
|
|
|
|
'pt-BR': 'pt-br',
|
|
|
|
|
'es-ES': 'es',
|
|
|
|
|
'fr-FR': 'fr',
|
|
|
|
|
'de-DE': 'de',
|
|
|
|
|
'ja-JP': 'ja',
|
|
|
|
|
'ko-KR': 'ko',
|
|
|
|
|
'ru-RU': 'ru',
|
|
|
|
|
'it-IT': 'it',
|
|
|
|
|
'th-TH': 'th',
|
|
|
|
|
'id-ID': 'id',
|
|
|
|
|
'uk-UA': 'uk',
|
|
|
|
|
'vi-VN': 'vi',
|
|
|
|
|
'ro-RO': 'ro',
|
|
|
|
|
'pl-PL': 'pl',
|
|
|
|
|
'hi-IN': 'hi',
|
|
|
|
|
'tr-TR': 'tr',
|
|
|
|
|
'fa-IR': 'fa',
|
|
|
|
|
'sl-SI': 'sl',
|
|
|
|
|
}
|
|
|
|
|
|
2025-04-18 13:59:12 +08:00
|
|
|
export const useFormatTimeFromNow = () => {
|
|
|
|
|
const { locale } = useI18N()
|
|
|
|
|
const formatTimeFromNow = useCallback((time: number) => {
|
2025-09-28 13:37:42 +08:00
|
|
|
const dayjsLocale = localeMap[locale] ?? 'en'
|
|
|
|
|
return dayjs(time).locale(dayjsLocale).fromNow()
|
2025-04-18 13:59:12 +08:00
|
|
|
}, [locale])
|
|
|
|
|
|
|
|
|
|
return { formatTimeFromNow }
|
|
|
|
|
}
|