Skip to content
Snippets Groups Projects
ATime.vue 679 B
Newer Older
<template>
  <time :datetime="isoRepresentation" :title="title">
    <slot :datetime="datetime" />
  </time>
</template>

<script lang="ts" setup>
import { parseISO } from 'date-fns'
import { computed } from 'vue'
import { useI18n } from '@/i18n'

const props = defineProps<{
  time: Date | string
}>()
const { locale } = useI18n()
const datetime = computed(() => (props.time instanceof Date ? props.time : parseISO(props.time)))
const isoRepresentation = computed(() =>
  typeof props.time === 'string' ? props.time : props.time.toISOString(),
)
const title = computed(() =>
  datetime.value.toLocaleString(locale.value, { dateStyle: 'full', timeStyle: 'medium' }),
)
</script>