vue.js将接口获得的时间截取年月日

admin 103 0
在Vue.js中,若需将接口获取的时间数据截取为年月日格式,可通过JavaScript的Date对象或日期处理库实现,接口返回的时间通常为时间戳(如毫秒/秒)或ISO字符串,需先转换为Date对象,使用new Date(timestamp)后,调用getFullYear()getMonth()+1(月份从0开始需+1)、getDate()获取年月日,再拼接为YYYY-MM-DD格式,为保持响应式,建议在Vue中使用计算属性(computed)封装处理逻辑,确保数据变化时自动更新,若需简化,可引入day.js等库,通过dayjs(timestamp).format('YYYY-MM-DD')快速格式化,提升代码可读性与维护性。

Vue.js中处理接口返回时间数据:截取年月日的实用方法

在Web开发中,前端框架Vue.js常与后端接口交互获取数据,而时间数据是常见的接口返回类型之一,后端返回的时间可能是时间戳(如Unix时间戳)、ISO格式字符串(如"2023-10-01T12:00:00Z")或其他时间格式,但前端展示时往往只需要"年月日"部分(如"2023-10-01"),本文将详细介绍在Vue.js中如何截取接口返回的时间数据,仅保留年月日信息,涵盖原生JavaScript方法和第三方库方案,并附实际应用场景和最佳实践。

接口时间数据的常见格式

在开始处理前,先明确接口返回的时间数据常见格式,不同格式对应不同的处理方式:

时间戳(Timestamp)

  • 秒级时间戳(10位,如1696118400,表示2023年10月1日0时0分0秒)
  • 毫秒级时间戳(13位,如1696118400000,JavaScript的Date对象默认处理毫秒级)

ISO格式字符串

  • 标准ISO 8601格式(如"2023-10-01T12:00:00Z""2023-10-01T08:00:00+08:00"
  • 简化格式(如"2023-10-01",直接包含年月日,无需截取)

自定义格式字符串

  • "2023/10/01 12:00""2023年10月01日",需通过字符串处理或正则提取

Vue.js中截取年月日的核心方法

Vue.js本质是前端框架,核心依赖JavaScript,因此可直接使用Date对象和字符串方法处理时间数据,以下是针对不同时间格式的处理逻辑。

原生JavaScript处理:Date对象与字符串操作

(1)处理时间戳(秒级/毫秒级)

时间戳需先转换为Date对象,再提取年、月、日:

// 假设接口返回毫秒级时间戳(如1696118400000)
const timestamp = 1696118400000; 
const date = new Date(timestamp);
// 提取年、月、日(注意:月份从0开始,需+1;日期/月份不足10位需补零)
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0'); // 补零:如"01"
const day = String(date.getDate()).padStart(2, '0');
const formattedDate = `${year}-${month}-${day}`; // 结果:"2023-10-01"

补零说明padStart(2, '0')确保月份和日期始终是两位数(如"1"变为"01"),避免显示"2023-1-1"不美观。

处理秒级时间戳

// 秒级时间戳需转换为毫秒
const secondTimestamp = 1696118400;
const date = new Date(secondTimestamp * 1000);
// 后续处理同上
(2)处理ISO格式字符串

ISO字符串可直接作为Date对象的参数,后续处理与时间戳一致:

// 假设接口返回ISO格式字符串(如"2023-10-01T12:00:00Z")
const isoString = "2023-10-01T12:00:00Z";
const date = new Date(isoString);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
const formattedDate = `${year}-${month}-${day}`; // 结果:"2023-10-01"

注意事项:时区问题!若接口返回的时间包含时区(如"+08:00"),Date对象会自动转换为本地时间;若为"Z"(UTC时间),则会转换为本地时间的UTC对应时间,若需忽略时区直接按字符串截取,可通过字符串分割处理(见下文)。

(3)直接截取ISO字符串中的年月日(无需Date对象)

若ISO字符串格式固定(如"YYYY-MM-DDTHH:mm:ssZ"),可通过字符串分割直接提取年月日,避免时区转换:

const isoString = "2023-10-01T12:00:00Z";
const datePart = isoString.split('T')[0]; // 分割后取第一部分:"2023-10-01"
// 若需格式化为"YYYY年MM月DD日"
const [year, month, day] = datePart.split('-');
const formattedDate = `${year}年${month}月${day}日`; // 结果:"2023年10月01日"
(4)处理自定义格式字符串

对于非标准格式的时间字符串,可以使用正则表达式或字符串分割:

// 示例1:处理"2023/10/01 12:00"格式
const customDate1 = "2023/10/01 12:00";
const dateParts1 = customDate1.split(' ')[0].split('/');
const formattedDate1 = `${dateParts1[0]}-${dateParts1[1]}-${dateParts1[2]}`;
// 示例2:处理"2023年10月01日"格式
const customDate2 = "2023年10月01日";
const dateParts2 = customDate2.match(/(\d{4})年(\d{1,2})月(\d{1,2})日/);
const formattedDate2 = `${dateParts2[1]}-${dateParts2[2].padStart(2, '0')}-${dateParts2[3].padStart(2, '0')}`;

第三方库处理:day.js(轻量级推荐)

对于复杂时间格式或频繁操作,使用轻量级时间库(如day.js)可简化代码,day.js API设计与moment.js类似,但体积仅2KB,适合Vue项目。

(1)安装day.js
npm install dayjs
# 或CDN引入
<script src="https://cdn.jsdelivr.net/npm/dayjs@1/dayjs.min.js"></script>
(2)在Vue组件中使用day.js
import dayjs from 'dayjs';
// 假设接口返回时间戳(毫秒级)
const timestamp = 1696118400000;
const formattedDate = dayjs(timestamp).format('YYYY-MM-DD'); // 结果:"2023-10-01"
// 假设接口返回ISO字符串
const isoString = "2023-10-01T12:00:00Z";
const formattedDate = dayjs(isoString).format('YYYY年MM月DD日'); // 结果:"2023年10月01日"
// 处理秒级时间戳(day.js默认处理毫秒,需手动转换)
const secondTimestamp = 1696118400; // 秒级
const formattedDate = dayjs.unix(secondTimestamp).format('YYYY-MM-DD'); // 结果:"2023-10-01"
// 链式调用示例
const complexDate = dayjs(isoString)
  .locale('zh-cn') // 设置中文语言包
  .format('YYYY年MM月DD日 dddd'); // 结果:"2023年10月01日 星期日"

优势

标签: #js #时间截取