当前位置: 首页 > news >正文

在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');
    }
  });
}

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

http://www.dtcms.com/a/109826.html

相关文章:

  • 蓝桥杯真题———k倍区间
  • Android开发okhttp添加头部参数
  • 智能建造新范式:装配式建筑 4.0 的数字化进阶
  • SpringBoot集成Redis 灵活使用 TypedTuple 和 DefaultTypedTuple 实现 Redis ZSet 的复杂操作
  • Vue3 性能优化指南:从理论到实战
  • N皇后问题(dfs回溯)
  • 如何把网页文章转为pdf保存
  • 计算机网络基础:容灾备份与业务连续性保障
  • 在 Ubuntu 上离线安装 Prometheus 和 Grafana
  • GMS测试环境搭建二——aapt2报错
  • Kafka配置内外网访问(解决kafka外网访问broker超时)
  • Pytorch中预置数据集的加载方式
  • 斜方肌科学训练原则:上斜方肌多牵拉放松,中下斜方肌多锻炼强健。 | 告别圆肩驼背、“富贵包”
  • 第十四届蓝桥杯大赛软件赛省赛Python 研究生组:4.互质数的个数
  • Python星球日记 - 第2天:数据类型与变量
  • Android U 分屏——分割线相关
  • 基于ANSYS 概率设计和APDL编程的结构可靠性设计分析
  • mqtt封装与使用
  • 大模型面试题
  • SSL/TLS
  • 【系统架构设计师】系统架构评估中的重要概念
  • 几何法证明卡特兰数_栈混洗
  • 代码随想录|动态规划|21组合总和IV
  • 从零开始:使用Spring Boot和MyBatis实现CRUD操作全攻略
  • 25.Reactor
  • PHP代码审计-01
  • RAGFlow 知识库分段研究
  • 码界奇缘 Java 觉醒 第一章 命运的终端
  • 数据驱动防灾:AI 大模型在地质灾害应急决策中的关键作用。基于DeepSeek/ChatGPT的AI智能体开发
  • 关于inode,dentry结合软链接及硬链接的实验