我有一个ISO 8601格式的持续时间,例如:PT5M或PT120S。
有没有什么方法可以使用moment.js解析这些并获取持续时间中指定的分钟数?
谢谢大家!
PS:我研究了解析ISO 8601持续时间,并将ISO 8601时间格式转换为正常持续时间
但很想知道这是否可行。
如果moment.js对于您的用例来说太重:我已经包装了一个小包来促进这一点:
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');
Install using npm install --save tinyduration or yarn add tinyduration
请参见: https://www.npmjs.com/package/tinyduration
它似乎不是受支持的格式之一:http://momentjs.com/docs/#/durations/
没有任何github存储库可以使用正则表达式解决它(如您所见,基于您提供的链接)。这解决了它,而无需使用日期。甚至需要片刻吗?
var regex = /P((([0-9]*\.?[0-9]*)Y)?(([0-9]*\.?[0-9]*)M)?(([0-9]*\.?[0-9]*)W)?(([0-9]*\.?[0-9]*)D)?)?(T(([0-9]*\.?[0-9]*)H)?(([0-9]*\.?[0-9]*)M)?(([0-9]*\.?[0-9]*)S)?)?/
minutesFromIsoDuration = function(duration) {
var matches = duration.match(regex);
return parseFloat(matches[14]) || 0;
}
如果您对其进行测试:
从Iso持续时间(“PT 120 S”);
0
minutesFromIsoDuration(“PT5M”);
5个
如果您希望逻辑持续时间以分钟为单位,则可以逃脱:
return moment.duration({
years: parseFloat(matches[3]),
months: parseFloat(matches[5]),
weeks: parseFloat(matches[7]),
days: parseFloat(matches[9]),
hours: parseFloat(matches[12]),
minutes: parseFloat(matches[14]),
seconds: parseFloat(matches[16])
});
其次
result.as("minutes");
moment使用<code>moment立即解析ISO格式的持续时间。持续时间方法:
moment.duration('P1Y2M3DT4H5M6S')
正则表达式很粗糙,但支持许多边缘情况,并且经过了相当彻底的测试。
瞬间版本:2.0.0 在阅读了文档后,我认为这将是直截了当的(Chrome控制台): 这是一个微不足道的例子,但我甚至不能让它发挥作用。我觉得我错过了什么大东西,但我真的不明白。即使这样,这似乎也不起作用: 编辑:我的最终目标是制作一个二进制状态图,就像我在这里所做的那样:http://bl.ocks.org/phobson/5872894 正如您所看到的,当我处理这个问题时,我目前正在使用虚拟的
我在使用java的解析包含小时、分钟和秒的字符串时遇到了麻烦。 这将引发以下异常: 线程 “main” java.time.format.DateTimeParseException 中的异常:无法在索引 0 处解析文本 '8:30:17'
我有ISO8601格式的持续时间值,我将其转换为时间值为整数秒,如下所示: ISO8601格式的持续时间值=“P1Y”。 我将该值存储在“时间-单位-秒”中。因此,当我检索的值将是在int,我想转换回ISO8601持续时间格式,所以我应该得到“P1Y”转换后回来。 有没有快速的方法可以做到这一点?或者我必须把时间的int值转换成float,然后通过某种方法把它转换成ISO8601持续时间。
问题内容: 我想使用H:MM:SS之类的格式以秒为单位格式化持续时间。Java中的当前实用程序旨在格式化时间而不是持续时间。 问题答案: 如果你使用的Java版本早于8 …,则可以使用Joda Time和PeriodFormatter。如果你确实有持续时间(例如,经过的时间量,没有参考日历系统),那么你可能应该大部分时间都在使用-然后可以致电(指定要反映25小时是否变为25小时) 1天1小时与否,
有没有什么简单的方法可以将ISO 8601字符串持续时间(< code > P(n)Y(n)M(n)DT(n)H(n)M(n)S )转换为< code >时间。持续时间? 来自维基百科的ISO 8601持续时间: 例如,“P3Y6M4DT12H30M5S”表示“三年、六个月、四天、十二小时、三十分钟和五秒”的持续时间。
我正在寻找一种从“ISO 8601持续时间格式”(P0DT0H0M0S)转换为小时的便捷方法。 到目前为止,我想到了这个: 如您所见,我的方法是将数字拆分并乘以24、1、1/60、1/3600以得到小时。我可以减少代码量吗? 样本数据和所需结果 输入: 'P1DT2H3M44S' (1 天 2 小时 3 分 44 秒) 期望输出: 26.062222222222222 (这是小时)