在Javascript/Angular中创建一个ISO 8601持续时间

Create an ISO 8601 Duration in Javascript/Angular

本文关键字:一个 ISO 持续时间 8601 Javascript Angular 创建      更新时间:2023-09-26

如何在JavaScript中创建持续时间,然后将其格式化为ISO 8601持续时间,例如2分钟30秒将为"PT2M30S"。

这可以用$interval完成吗?或者这可以通过Date().getTime()实现吗?

我有一个互动,我需要跟踪花费的时间,所以我会在开始时得到日期,还是在互动结束时再得到日期,互相减去,然后格式化为ISO 8601?努力寻找正确的语法或有用的库。

包装了一个小程序包来帮助实现这一点:https://www.npmjs.com/package/tinyduration

用法示例:

import { parse, serialize } from 'tinyduration';
 
// Basic parsing
const durationObj = parse('P1Y2M3DT4H5M6S');
assert(durationObj, {
    years: 1,
    months: 2,
    days: 3,
    hours: 4,
    minutes: 5,
    seconds: 6
});
 
// Serialization
assert(serialize(durationObj), 'P1Y2M3DT4H5M6S');

您可以使用npm install --save tinydurationyarn add tinyduration 进行安装

对于Angular(2+)

您可以使用我的ngx持续时间选择器,它允许用户选择持续时间并自动将其转换为ISO 8601格式。

这里有现场演示。

Moment是一个非常流行的JavaScript日期操作库,能够在ISO8601中格式化持续时间。以下是如何首先计算两个日期之间的差异,然后根据该差异生成持续时间字符串的示例

var first = moment("2015-10-01"),
  second = moment("2015-10-02");
console.log(moment.duration(second.diff(first), "ms").toISOString());
// "PT24H"
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.26.0/moment.min.js"></script>

查看文档中的持续时间格式以了解更多详细信息。