You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Ionic中替代java.util.Calendar的日期计算工具选型咨询

嘿,在Ionic里做这些日期时间计算根本不用找那些GUI日历组件啦!毕竟Ionic本质是基于JS/TS的跨平台框架,直接用专门的日期处理类库就能搞定,完全能替代Java里Calendar的功能,而且代码更简洁。

核心推荐的日期库

首推Day.js(轻量,体积仅2KB左右,API和Moment.js几乎一致),其次是date-fns(函数式设计,支持树摇,打包体积更小)。如果是维护老项目,可能会用到Moment.js,但它现在已进入维护模式,不推荐新项目使用。

你可以直接通过npm安装这些库,比如安装Day.js:

npm install dayjs

1. Unix时间转星期几

不管是秒级还是毫秒级的Unix时间,用Day.js都能轻松转换:

import dayjs from 'dayjs';

// 示例:秒级Unix时间
const unixTime = 1620000000;
// 获取星期数字(0=周日,1=周一...6=周六)
const weekdayNum = dayjs.unix(unixTime).day();
// 获取英文星期名(比如"Monday")
const weekdayEn = dayjs.unix(unixTime).format('dddd');
// 获取中文星期名(比如"星期一")
const weekdayZh = dayjs.unix(unixTime).format('星期d');

如果用原生Date对象也能实现,但格式化星期名需要自己写逻辑,远不如类库方便。

2. 给已知日期添加指定秒数得到新日期

用Day.js的add方法可以快速实现,支持各种时间单位:

import dayjs from 'dayjs';

// 已知日期可以是ISO字符串、Date对象或者Unix时间
const originalDate = '2024-05-20T12:00:00';
const addSeconds = 3600; // 要添加的秒数(这里是1小时)

// 计算新日期
const newDate = dayjs(originalDate).add(addSeconds, 'second');
// 格式化输出(按需调整格式)
console.log(newDate.format('YYYY-MM-DD HH:mm:ss'));

3. 计算两个日期之间的时间差

Day.js的diff方法可以直接获取两个日期在指定单位下的差值:

import dayjs from 'dayjs';

const date1 = dayjs('2024-01-01');
const date2 = dayjs('2024-05-20');

// 计算天数差
const diffDays = date2.diff(date1, 'day');
// 计算秒数差
const diffSeconds = date2.diff(date1, 'second');
// 还支持小时、分钟、月、年等单位
const diffMonths = date2.diff(date1, 'month');

4. 计算两个Unix时间之间的工作日天数(不含周末)

这个需求确实需要额外处理,不过用Day.js也能轻松实现:

方法一:用Day.js的isWeekday插件

先安装插件:

npm install dayjs-plugin-is-weekday

然后编写计算逻辑:

import dayjs from 'dayjs';
import isWeekday from 'dayjs-plugin-is-weekday';

// 扩展Day.js功能
dayjs.extend(isWeekday);

function countWorkdays(startUnix: number, endUnix: number): number {
  let workdayCount = 0;
  let currentDay = dayjs.unix(startUnix);
  const endDay = dayjs.unix(endUnix);

  // 遍历每一天,统计工作日
  while (currentDay.isBefore(endDay) || currentDay.isSame(endDay)) {
    if (currentDay.isWeekday()) { // 自动排除周六、周日
      workdayCount++;
    }
    currentDay = currentDay.add(1, 'day');
  }
  return workdayCount;
}

// 调用示例
const startUnix = 1713561600; // 2024-04-20 00:00:00
const endUnix = 1714166400; // 2024-04-27 00:00:00
console.log(countWorkdays(startUnix, endUnix)); // 输出5(周一到周五)

方法二:手动判断星期几

如果不想安装插件,也可以自己判断星期几来排除周末:

import dayjs from 'dayjs';

function countWorkdays(startUnix: number, endUnix: number): number {
  let workdayCount = 0;
  let currentDay = dayjs.unix(startUnix);
  const endDay = dayjs.unix(endUnix);

  while (currentDay.isBefore(endDay) || currentDay.isSame(endDay)) {
    const weekday = currentDay.day();
    // 0=周日,6=周六,排除这两天
    if (weekday !== 0 && weekday !== 6) {
      workdayCount++;
    }
    currentDay = currentDay.add(1, 'day');
  }
  return workdayCount;
}

要是还需要排除节假日,就得自己维护对应地区的节假日列表,在循环里额外判断即可,这个没有通用的库能覆盖所有场景。


内容的提问来源于stack exchange,提问作者Audrius Meškauskas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:11:20