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

时间:2015-11-20 07:58:16

标签: javascript angularjs iso8601

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

可以用$ interval来完成吗?或者可以使用Date()。getTime()?

来实现

我需要跟踪花费时间的互动,所以我会在开始或交互时获得日期,然后在最后再次,相互减去然后格式化为ISO 8601?苦苦寻找正确的语法或有用的lib。

3 个答案:

答案 0 :(得分:1)

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

var first = moment("2015-10-01"),
    second = moment("2015-10-02");

moment.duration(second.diff(first), "ms").toISOString();
// "PT24H"

有关详细信息,请查看documentation for duration formatting

答案 1 :(得分:0)

包装了一个小包装来帮助解决这个问题: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

安装它

答案 2 :(得分:0)

对于 Angular (2+)

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

有现场演示here