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

前端利器:DateUtils 日期时间工具深度剖析

序言

在前端开发中,日期和时间的处理是一个常见且重要的任务。从格式化日期展示到复杂的日期计算,每一个环节都需要精确和高效的代码支持。今天,我们就来深入探讨一个精心打造的前端日期时间工具类 DateUtils,它涵盖了从基础的日期格式化到高级的日期范围计算等一系列实用功能。

一、工具类概述

DateUtils 是一个功能丰富的日期时间工具集合,它为开发者提供了便捷的方式来处理各种日期和时间相关的操作。该工具类依赖于一个辅助工具 TypeUtils 中的 isDate 方法来进行日期对象的有效性验证。通过枚举定义了多种常见的日期格式,并且提供了一系列方法来实现日期的格式化、解析、相对时间获取、日期范围计算、日期加减、差值计算等功能。

二、核心功能解析

(一)日期格式化

  1. FORMAT 枚举
    DateUtils 首先定义了一个 FORMAT 枚举,它包含了多种常用的日期格式,如 DATEYYYY - MM - DD)、TIMEHH:mm:ss)、DATETIMEYYYY - MM - DD HH:mm:ss)等,涵盖了中文和英文的常见格式,方便开发者在不同场景下选择合适的格式。
  2. format 方法
format(date: Date, format: string = this.FORMAT.DATETIME): string {
   
    if (!TypeUtils.isDate(date)) {
   
        throw new Error("无效的日期对象!");
    }
    const year = date.getFullYear();
    const month = date.getMonth() + 1;
    const day = date.getDate();
    const hours = date.getHours();
    const minutes = date.getMinutes();
    const seconds = date.getSeconds();
    return format
     .replace("YYYY", year.toString())
     .replace("MM", month.toString().padStart(2, "0"))
     .replace("DD", day.toString().padStart(2, "0"))
     .replace("HH", hours.toString().padStart(2, "0"))
     .replace("mm", minutes.toString().padStart(2, "0"))
     .replace("ss", seconds.toString().padStart(2, "0"));
}

该方法接收一个 Date 对象和一个可选的格式字符串作为参数。如果未传入格式字符串,则默认使用 DATETIME 格式。首先通过 TypeUtils.isDate 方法验证日期对象的有效性,然后从 Date 对象中提取年、月、日、时、分、秒等信息,最后通过字符串替换的方式将占位符替换为实际的日期时间值,实现日期的格式化。

(二)日期解析

parse 方法用于将日期字符串解析为 Date 对象。

parse(dateStr: string): Date {
   
    const date = new Date(dateStr);
    if (isNaN(date.getTime())) {
   
        throw new Error("无效的日期字符串!");
    }
    return date;
}

该方法尝试使用 Date 构造函数将传入的字符串解析为日期对象。如果解析后的日期对象的 getTime 方法返回 NaN,则说明解析失败,抛出“无效的日期字符串!”错误。

(三)相对时间获取

getRelativeTime 方法用于获取相对于当前时间的日期描述。

getRelativeTime(date: Date): string {
   
    const now = new Date();
    const diff = now.getTime() - date.getTime();
    const minutes = Math.floor(

http://www.kler.cn/a/554313.html

相关文章:

  • 如何在 PDF 文件中嵌入自定义数据
  • 基于大数据的国内高校排名可视化分析及推荐系统
  • 【大语言模型_3】ollama本地加载deepseek模型后回答混乱问题解决
  • 电容五大基本作用详解
  • 【Leetcode 每日一题】2080. 区间内查询数字的频率
  • 【Dubbo+Zookeeper】——SpringBoot+Dubbo+Zookeeper知识整合
  • VSCode AI提效工具,通义灵码前端开发体验
  • GUI编程(window系统→Linux系统)
  • 【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter18-动画与 Canvas 图形
  • 微信小程序(uni)+蓝牙连接+Xprint打印机实现打印功能
  • 【嵌入式Linux应用开发基础】进程间通信(2):消息队列
  • 汽车免拆诊断案例 | 2013 款奔驰 S300L 车起步时车身明显抖动
  • 为AI聊天工具添加一个知识系统 之113 详细设计之54 Chance:偶然和适配 之1
  • 【蓝桥】二分法
  • HTML第一节
  • 使用 FFmpeg 剪辑视频指南
  • joint_info smpl
  • SpringCloud-Eureka初步使用
  • 本地部署deepseek条件
  • mysql索引为什么用B+树不用,B树或者红黑树