在Vue3中格式化后端返回的Java Date类型数据为指定格式

在前端Vue3项目中,格式化后端返回的java.util.Date类型时间到yyyy-MM-dd HH:mm:ss格式,有几种常用方法:

方法一:使用JavaScript内置方法

<JAVASCRIPT>

// 假设后端返回的数据结构为 { createTime: '2023-05-15T08:30:00.000+00:00' }

function formatDate(date) {
  const d = new Date(date);
  const year = d.getFullYear();
  const month = String(d.getMonth() + 1).padStart(2, '0');
  const day = String(d.getDate()).padStart(2, '0');
  const hours = String(d.getHours()).padStart(2, '0');
  const minutes = String(d.getMinutes()).padStart(2, '0');
  const seconds = String(d.getSeconds()).padStart(2, '0');
  
  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}

// 使用示例
const formattedDate = formatDate(backendData.createTime);

方法二:使用day.js(推荐)

1. 首先安装day.js

<BASH>

npm install dayjs

2. 创建实用函数

<JAVASCRIPT>

// utils/dateUtils.js
import dayjs from 'dayjs';

export function formatDateTime(date) {
  return dayjs(date).format('YYYY-MM-DD HH:mm:ss');
}

3. 在组件中使用

<VUE>

<template>
  <div>
    <p>创建时间: {{ formatDateTime(item.createTime) }}</p>
  </div>
</template>

<script setup>
import { formatDateTime } from '@/utils/dateUtils';

const item = {
  createTime: '2023-05-15T08:30:00.000+00:00' // 假设这是后端返回的数据
};
</script>

方法三:使用Vue filter(虽然Vue3中不太推荐,但兼容Vue2)

<JAVASCRIPT>

// main.js
import { createApp } from 'vue';
import dayjs from 'dayjs';

const app = createApp(App);

app.config.globalProperties.$filters = {
  formatDate(date) {
    return dayjs(date).format('YYYY-MM-DD HH:mm:ss');
  }
};

app.mount('#app');

在模板中使用:

<VUE>

<template>
  <span>{{ $filters.formatDate(item.createTime) }}</span>
</template>

方法四:使用自定义hook(Composition API方式)

<JAVASCRIPT>

// hooks/useDateFormat.js
import { computed } from 'vue';
import dayjs from 'dayjs';

export function useDateFormat() {
  const formatDate = (date) => {
    return computed(() => dayjs(date).format('YYYY-MM-DD HH:mm:ss')).value;
  };

  return { formatDate };
}

在组件中使用:

<VUE>

<script setup>
import { useDateFormat } from '@/hooks/useDateFormat';

const { formatDate } = useDateFormat();

const backendData = {
  createTime: '2023-05-15T08:30:00.000+00:00'
};
</script>

<template>
  <p>格式化后的时间: {{ formatDate(backendData.createTime) }}</p>
</template>

处理时区问题

如果后端返回的时间字符串包含时区信息(如2023-05-15T08:30:00.000+00:00),需要特别注意时区转换:

<JAVASCRIPT>

// 使用dayjs处理时区
import dayjs from 'dayjs';
import utc from 'dayjs/plugin/utc';
import timezone from 'dayjs/plugin/timezone';

dayjs.extend(utc);
dayjs.extend(timezone);

function formatDateWithTimezone(date) {
  return dayjs.utc(date).tz('Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss');
}

最佳实践建议

  1. 推荐使用day.js - 它轻量且功能强大,相比moment.js体积更小
  2. 封装为工具函数 - 将日期格式化逻辑封装,便于统一管理和修改
  3. 在接口层处理 - 可以在axios响应拦截器中统一格式化日期字段
  4. 考虑时区 - 确保前端显示的时区与用户期望的一致(通常是本地时区或东八区)

响应拦截器统一处理示例

<JAVASCRIPT>

// src/utils/request.js
import dayjs from 'dayjs';

const service = axios.create({
  // ...其他配置
});

service.interceptors.response.use(response => {
  if (response.data && response.data.data) {
    formatDates(response.data.data);
  }
  return response;
});

function formatDates(obj) {
  if (!obj || typeof obj !== 'object') return;
  
  Object.keys(obj).forEach(key => {
    // 假设所有包含"time"或"date"的字段都是日期字段
    if (/time|date|Time|Date/.test(key) && obj[key]) {
      obj[key] = dayjs(obj[key]).format('YYYY-MM-DD HH:mm:ss');
    }
  });
}

这样处理后,所有接口返回的日期字段会自动格式化为指定格式,无需在每个组件中单独处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值