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

在Javascript/Angular中创建ISO 8601持续时间,javascript,angularjs,iso8601,Javascript,Angularjs,Iso8601,我如何在JavaScript中创建一个持续时间,然后将其格式化为ISO 8601持续时间,例如2分钟30秒将是“PT2M30S” 这可以用$interval完成吗?或者这可以通过Date().getTime()实现吗 我有一个互动,我需要跟踪花在上面的时间,所以我会在开始或互动时得到日期,然后在结束时再从彼此中减去,然后格式化为ISO 8601吗?努力寻找正确的语法或有用的库。是一个非常流行的JavaScript日期操纵库,能够在ISO8601中格式化持续时间。下面是一个示例,说明如何首先计算两

我如何在JavaScript中创建一个持续时间,然后将其格式化为ISO 8601持续时间,例如2分钟30秒将是“PT2M30S”

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

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

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

var first=力矩(“2015-10-01”),
秒=力矩(“2015-10-02”);
log(moment.duration(second.diff(first),“ms”).toISOString());
//“PT24H”

包装一个小包装以帮助:

用法示例:

从'tinyduration'导入{parse,serialize};
//基本语法分析
const durationObj=parse('P1Y2M3DT4H5M6S');
断言(durationObj{
年份:1,
月份:2,
天数:3,
时间:4,,
会议记录:5,
秒:6
});
//系列化
断言(序列化(durationObj),'P1Y2M3DT4H5M6S');

您可以使用
npm install--save tinyduration
warn add tinyduration

安装它。如果您有date对象,那么您可以简单地使用@Satpal。OP需要的是持续时间,而不是日期和时间。如果您的时间很短(比如不到一个月)然后,您可以简单地从另一个日期中减去一个日期,以毫秒为单位得到差值,然后转换为一个时间间隔。唯一的问题是夏令时边界。月和年的持续时间需要做更多的工作,因为它们的长度不一致。
moment.diff()
返回ms,这意味着不可能再以天为单位表示期间(参与方),因为不是每天都有相同的长度(DST等)。