vue3时间格式化

145 阅读2分钟

今天面试,面试官问我时间格式化,最近脑袋有点发懵加上两个月没碰vue框架,回答的乱七八糟,所以回来后面整理了一下,希望以后能够将这个东西记在脑子里面。

时间格式化:目前我了解到的有三种方法,一是dayjs,二是date-fns,三是原生js;前两个需要安装库,当然用起来很方便,后者不需要安装库。

三种方法对比:

方法优点缺点推荐场景
使用 date-fns功能强大、模块化(按需引入)、API 直观、体积较小需安装第三方库大多数项目,特别是需要复杂日期操作国际化
使用 Day.js功能丰富、API 设计优雅(链式调用)、体积非常小(仅约2KB)需安装第三方库大多数项目,特别是注重包大小开发体验
使用原生 Date无需安装额外依赖、浏览器原生支持代码相对繁琐、需手动处理月份(0-11)、时区等问题极其简单的日期显示,且严格控制包大小的项目

方法一:使用 Day.js(推荐)

安装依赖:npm install dayjs (组件引用或者全局引用都可以)

Day.js 常用格式化格式

格式代码含义示例
YYYY四位数的年份2025
MM两位数的月份09
M一位数的月份9
DD两位数的日期15
D一位数的日期15
HH24小时制的小时14
hh12小时制的小时02
mm分钟05
ss09
A上午/下午大写AM / PM
a上午/下午小写am / pm

组件内使用

<template>
  <div>
    <p>当前时间:{{ formatDate(currentTime) }}</p>
  </div>
</template>
<script setup>
import dayjs from 'dayjs';
import { ref } from 'vue';
const currentTime = ref(new Date());

//----------------------------------方法一:dayjs----------------------------------
 const formatDate = (date) => {
   console.log(date)
   const first=dayjs(date).format('YYYY-MM-DD')
   const second=dayjs(date).format('YYYY-MM-DD HH:mm:ss')
   return `${first} ${second}`
 }
</script>

<style scoped></style>

方法二: 使用 date-fns

安装依赖:npm install date-fns

代码示例:

<template>
  <div>
    <p>当前时间:{{ formatDate(currentTime) }}</p>
  </div>
</template>
<script setup>

import { ref } from 'vue';
import { format } from 'date-fns';
const currentTime = ref(new Date());

//----------------------------------方法二:date-fns----------------------------------
 const formatDate = (date) => {
   console.log(date)
   const first=format(date,'yyyy-MM-dd')
   const second=format(date,'yyyy-MM-dd HH:mm:ss')
   return `${first} ${second}`
 }
</script>

<style scoped></style>

方法三: 原生 JavaScript Date 对象

代码示例:

<template>
  <div>
    <p>当前时间:{{ formatDate(currentTime) }}</p>
  </div>
</template>
<script setup>
import { ref } from 'vue';
const currentTime = ref(new Date());
//----------------------------------方法三:原生js----------------------------------
const formatDate = (date) => {
  console.log(date);
  //padZero为了保证最小位数是两位,也就是补充0
  const padZero = (num) => num.toString().padStart(2, '0');
  const year = date.getFullYear();
  const month = padZero(date.getMonth() + 1);
  const day = padZero(date.getDate());
  const hour = padZero(date.getHours());
  const minute = padZero(date.getMinutes());
  const second = padZero(date.getSeconds());
  return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
};
</script>

<style scoped></style>