MomentJS - 持续时间
现代日期/时间:Moment.js 中的持续时间
Section titled “现代日期/时间:Moment.js 中的持续时间”处理一段时间长度,或称“持续时间”(durations),是应用程序中的常见任务,例如计算订阅周期或任务完成时间。Moment.js 提供了一个专门的 duration 对象来有效管理这些时间跨度。
虽然 Moment.js 简化了持续时间处理,但请记住它目前处于维护模式。对于新项目,请考虑 Day.js 或 date-fns 等替代方案,它们通常提供更好的性能和更小的打包体积(bundle sizes)。更多详细信息请参阅“概述”部分。
创建和使用持续时间对象
Section titled “创建和使用持续时间对象”您可以通过几种方式创建持续时间对象:
- 从数字和单位创建:
moment.duration(100, 'milliseconds'),moment.duration(2, 'hours') - 从对象创建:
moment.duration({ seconds: 2, minutes: 2, hours: 2, days: 2, weeks: 2, months: 2, years: 2 }) - 从 ISO 8601 持续时间字符串创建:
moment.duration('P1Y2M3DT4H5M6S') - 从两个时刻之间的差值创建:
const duration = moment.duration(endMoment.diff(startMoment));
常用的持续时间方法
Section titled “常用的持续时间方法”一旦您拥有一个持续时间对象,就可以使用各种方法对其进行操作和查询:
| 方法类别 | 示例语法 |
|---|---|
| 创建 | moment.duration(Number, String); moment.duration(Object); moment.duration(String); |
| 克隆(对不可变性很重要) | const newDuration = originalDuration.clone(); |
| 人性化显示(易读格式) | duration.humanize(); // 例如,‘a few seconds’, ‘2 hours’ |
| 获取总长度(以特定单位) | duration.asMilliseconds(); duration.asSeconds(); duration.asMinutes(); duration.asHours(); duration.asDays(); duration.asWeeks(); duration.asMonths(); duration.asYears(); |
| 获取单位值(在持续时间分解中) | duration.milliseconds(); // 0-999 duration.seconds(); // 0-59 duration.minutes(); // 0-59 duration.hours(); // 0-23 duration.days(); // 0-30 (approx) duration.weeks(); // (derived) duration.months(); // 0-11 duration.years(); |
| 增加时间 | duration.add(500, ‘ms’); duration.add({ hours: 1, minutes: 30 }); duration.add(anotherDuration); |
| 减少时间 | duration.subtract(1, ‘day’); duration.subtract({ seconds: 10 }); duration.subtract(anotherDuration); |
| 获取特定单位值(单位值获取器的别名) | duration.get(‘hours’); // 等同于 duration.hours() |
| 转换为 ISO 8601 字符串 | duration.toISOString(); // 例如,‘PT1H30M’ |
| 转换为 JSON(序列化) | duration.toJSON(); // 返回 ISO 8601 字符串 |
| 检查类型 | moment.isDuration(obj); // 如果 obj 是 Moment Duration 对象则返回 true |
| 本地化 | duration.locale(String); // 为 humanize 输出设置语言环境 duration.locale(); // 获取当前语言环境 |
实际示例:计算任务时长
Section titled “实际示例:计算任务时长”const startTime = moment('2023-10-26T09:00:00');const endTime = moment('2023-10-26T11:25:30');
// Calculate the differenceconst taskDuration = moment.duration(endTime.diff(startTime));
// Display in a human-readable formatconsole.log(`Task took approximately ${taskDuration.humanize()}.`); // Output: Task took approximately 2 hours.
// Get the precise duration in minutesconsole.log(`Precise duration: ${taskDuration.asMinutes()} minutes.`); // Output: Precise duration: 145.5 minutes.
// Get component valuesconsole.log(`Hours: ${taskDuration.hours()}, Minutes: ${taskDuration.minutes()}, Seconds: ${taskDuration.seconds()}`); // Output: Hours: 2, Minutes: 25, Seconds: 30这演示了持续时间如何表示时间差,并可以以各种格式显示或分析。
对于更复杂的持续时间格式化(例如,‘HH:mm:ss’),您可能需要使用 moment-duration-format 插件(请检查其维护状态)或使用自定义格式化逻辑。
请参考 Moment.js 官方文档了解详细的 API 信息:https://momentjs.com/docs/#/durations/