您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

use-format-time-from-now.ts 1.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import dayjs from 'dayjs'
  2. import relativeTime from 'dayjs/plugin/relativeTime'
  3. import { useCallback } from 'react'
  4. import { useI18N } from '@/context/i18n'
  5. import type { Locale } from '@/i18n-config'
  6. import 'dayjs/locale/de'
  7. import 'dayjs/locale/es'
  8. import 'dayjs/locale/fa'
  9. import 'dayjs/locale/fr'
  10. import 'dayjs/locale/hi'
  11. import 'dayjs/locale/id'
  12. import 'dayjs/locale/it'
  13. import 'dayjs/locale/ja'
  14. import 'dayjs/locale/ko'
  15. import 'dayjs/locale/pl'
  16. import 'dayjs/locale/pt-br'
  17. import 'dayjs/locale/ro'
  18. import 'dayjs/locale/ru'
  19. import 'dayjs/locale/sl'
  20. import 'dayjs/locale/th'
  21. import 'dayjs/locale/tr'
  22. import 'dayjs/locale/uk'
  23. import 'dayjs/locale/vi'
  24. import 'dayjs/locale/zh-cn'
  25. import 'dayjs/locale/zh-tw'
  26. dayjs.extend(relativeTime)
  27. const localeMap: Record<Locale, string> = {
  28. 'en-US': 'en',
  29. 'zh-Hans': 'zh-cn',
  30. 'zh-Hant': 'zh-tw',
  31. 'pt-BR': 'pt-br',
  32. 'es-ES': 'es',
  33. 'fr-FR': 'fr',
  34. 'de-DE': 'de',
  35. 'ja-JP': 'ja',
  36. 'ko-KR': 'ko',
  37. 'ru-RU': 'ru',
  38. 'it-IT': 'it',
  39. 'th-TH': 'th',
  40. 'id-ID': 'id',
  41. 'uk-UA': 'uk',
  42. 'vi-VN': 'vi',
  43. 'ro-RO': 'ro',
  44. 'pl-PL': 'pl',
  45. 'hi-IN': 'hi',
  46. 'tr-TR': 'tr',
  47. 'fa-IR': 'fa',
  48. 'sl-SI': 'sl',
  49. }
  50. export const useFormatTimeFromNow = () => {
  51. const { locale } = useI18N()
  52. const formatTimeFromNow = useCallback((time: number) => {
  53. const dayjsLocale = localeMap[locale] ?? 'en'
  54. return dayjs(time).locale(dayjsLocale).fromNow()
  55. }, [locale])
  56. return { formatTimeFromNow }
  57. }