鸿蒙三方库 | harmony-utils之DateUtil日期计算详解

前言

日期计算在排班、计时、日历等场景中非常常用,如计算两个日期的差值、日期加减天数等。@pura/harmony-utilsDateUtil 封装了日期计算方法。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解,帮助开发者快速掌握并应用到实际项目中。

一、DateUtil计算核心API

DateUtil 提供了以下日期计算方法:

方法 说明 返回类型 使用场景
addDays(date, days) 加减天数 Date 日期推算
addMonths(date, months) 加减月份 Date 月份推算
addYears(date, years) 加减年份 Date 年份推算
daysBetween(date1, date2) 天数差 number 倒计时
isSameDay(date1, date2) 是否同一天 boolean 日期比较
isLeapYear(year) 是否闰年 boolean 日历功能
getDaysInMonth(year, month) 获取月份天数 number 日历展示

1.1 核心特性

  • 简洁易用:封装复杂逻辑为一行调用,降低使用门槛
  • 类型安全:完整的TypeScript类型定义,编译期即可发现错误
  • 异常处理:内置异常捕获机制,避免运行时崩溃
  • 灵活计算:支持天、月、年的加减和差值计算

1.2 计算方法对照

方法 输入 输出 说明
addDays 今天+1 明天 天数加减
addMonths 1月+1 2月 月份加减
daysBetween 1月1日~6月15日 166 天数差值
isLeapYear 2024 true 闰年判断

二、完整使用步骤

2.1 安装依赖

bash 复制代码
ohpm install @pura/harmony-utils

2.2 日期加减

typescript 复制代码
import { DateUtil } from '@pura/harmony-utils';

Button('日期加减')
  .width('100%')
  .onClick(() => {
    try {
      let today = new Date();
      let tomorrow = DateUtil.addDays(today, 1);
      let nextMonth = DateUtil.addMonths(today, 1);
      this.result = `明天: ${DateUtil.format(tomorrow, 'yyyy-MM-dd')}\n下月: ${DateUtil.format(nextMonth, 'yyyy-MM-dd')}`;
    } catch (e) {
      this.result = '异常: ' + e;
    }
  })

2.3 日期差值

typescript 复制代码
Button('日期差值')
  .width('100%')
  .onClick(() => {
    try {
      let d1 = new Date(2024, 0, 1);
      let d2 = new Date(2024, 5, 15);
      let days = DateUtil.daysBetween(d1, d2);
      this.result = `相差: ${days}天`;
    } catch (e) {
      this.result = '异常: ' + e;
    }
  })

三、完整页面示例

typescript 复制代码
import { DateUtil } from '@pura/harmony-utils';

@Entry
@Component
struct DateCalcDemo {
  @State result: string = '';

  build() {
    Column({ space: 12 }) {
      Button('日期加减').width('100%').onClick(() => {
        let today = new Date();
        this.result = `明天: ${DateUtil.format(DateUtil.addDays(today, 1), 'yyyy-MM-dd')}`;
      });
      Button('天数差').width('100%').onClick(() => {
        let d1 = new Date(2024, 0, 1);
        let d2 = new Date();
        this.result = `相差: ${DateUtil.daysBetween(d1, d2)}天`;
      });
      Text(this.result).fontSize(14).fontColor('#333333')
    }
    .padding(16)
  }
}

四、进阶用法

4.1 倒计时计算

typescript 复制代码
import { DateUtil } from '@pura/harmony-utils';

function getDaysUntil(targetDate: Date): number {
  return DateUtil.daysBetween(new Date(), targetDate);
}

4.2 会员到期日

typescript 复制代码
function calculateExpiry(startDate: Date, months: number): string {
  let expiry = DateUtil.addMonths(startDate, months);
  return DateUtil.format(expiry, 'yyyy-MM-dd');
}

五、注意事项

  1. 负数加减:传入负数可以向前推算日期
  2. 月份溢出:1月31日+1个月可能变为3月2日或3月3日
  3. 时区影响:计算基于本地时区
  4. 初始化依赖 :使用前需确保 AppUtil.init() 已调用
  5. 精度限制:daysBetween返回整数天

六、常见问题

Q1: addDays传入负数有效吗?

有效,addDays(today, -1)返回昨天。

Q2: daysBetween的顺序影响结果吗?

影响,结果可能为负数,建议用Math.abs取绝对值。

Q3: isLeapYear对1900年返回什么?

1900年不是闰年(能被100整除但不能被400整除),返回false。

Q4: getDaysInMonth的月份从0还是1开始?

取决于实现,通常1-12表示1月到12月。

总结

DateUtil 的日期计算方法为日期推算和差值计算提供了便捷支持。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。开发者可以利用这些方法实现倒计时、到期日等功能。

本文基于 @pura/harmony-utils 工具库,更多功能请参考官方文档与后续系列文章。

相关推荐
kiros_wang1 小时前
@Observed/@ObjectLink深层监听:嵌套对象更新失效根源与修复
华为·harmonyos
智塑未来8 小时前
鸿蒙6.1隐私安全升级——加密分享限时查看+水印+应用锁+防诈一键开启
安全·华为·harmonyos
OH_TPC9 小时前
HarmonyOS APP开发---“股动力“实时行情App,需要用到这个库
华为·音视频·harmonyos·鸿蒙
core5129 小时前
如何从多架构 Docker 镜像中导出指定的 ARM64 版本
华为·docker·架构·镜像·导出·多架构
砚凝霜11 小时前
软考网络工程师|案例分析:华为盒式交换机开局一本通核心考点总结
网络·华为
小雨青年11 小时前
【HarmonyOS 7 沉浸光感深度实战】10 通用组件封装与现有项目接入
华为·harmonyos
YM52e11 小时前
蒙特卡洛模拟器:鸿蒙 Canvas 上的大数定律与中心极限定理实证
华为·harmonyos
Dovis(誓平步青云)13 小时前
DevEco Studio 6.1.1 Windows 安装实录:从下载校验到首次启动
android·开发语言·数据库·人工智能·windows·harmonyos
2501_9197490313 小时前
华为鸿蒙免费排班APP—小羊排班
华为·harmonyos·鸿蒙
大雷神14 小时前
相册照片不用上传:HarmonyOS Core Vision 端侧识别动物与植物
harmonyos