Time.vue 1011 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. <template>
  2. <text>
  3. {{ formatDate }}
  4. </text>
  5. </template>
  6. <script lang="ts" setup>
  7. import {format, formatDistanceToNow} from 'date-fns'
  8. import {zhCN} from 'date-fns/locale'
  9. import {computed} from "vue";
  10. // 定义props
  11. const props = defineProps({
  12. time: {
  13. type: [Number, Date, String],
  14. default: new Date()
  15. }
  16. })
  17. /**
  18. * 格式化时间
  19. */
  20. const formatDate = computed(() => {
  21. const type = typeof props.time;
  22. let time;
  23. if (type === 'number') {
  24. //@ts-ignore
  25. const timestamp = props.time.toString().length > 10 ? props.time : props.time * 1000;
  26. time = (new Date(timestamp)).getTime();
  27. } else if (type === 'object') {
  28. //@ts-ignore
  29. time = props.time.getTime();
  30. } else if (type === 'string') {
  31. time = (new Date(props.time)).getTime();
  32. }
  33. if(new Date().getTime()-time>1000*60*60*24*3){
  34. return format(time,'yyyy-MM-dd HH:mm')
  35. }else{
  36. return formatDistanceToNow(time, {
  37. locale: zhCN,
  38. addSuffix: true,
  39. });
  40. }
  41. })
  42. </script>
  43. <style>
  44. </style>