在 Luxon 中解析 ISO 8601 的持续时间

pix*_*xel 2 javascript duration typescript luxon

我的持续时间字符串如下所示:

1:16.352
Run Code Online (Sandbox Code Playgroud)

其中1是分钟部分,16是秒部分,352是毫秒部分。

我想使用Duration.fromISOTime但我得到:

{
  "reason": "unparsable",
  "explanation": "the input \"1:16.352\" can't be parsed as ISO 8601"
}
Run Code Online (Sandbox Code Playgroud)

Luxon 有没有一种干净的方法来解析这样的持续时间?

Vin*_*zoC 5

Duration.fromISOTime不起作用,因为不是1:16.352ISO 8601 时间字符串,小时部分丢失(请参阅 I SO 8601 Times)。

构建 LuxonDuration对象的解决方法如下:

const DateTime = luxon.DateTime;
const Duration = luxon.Duration;

const startOfHour = DateTime.local().startOf('hour').toMillis();
const dt = DateTime.fromFormat("1:16.352", "m:ss.SSS"). toMillis();
const dur = Duration.fromMillis(dt - startOfHour);
console.log(dur.toFormat("m 'minute' s 'second' S 'millis'"));
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdn.jsdelivr.net/npm/luxon@1.26.0/build/global/luxon.js"></script>
Run Code Online (Sandbox Code Playgroud)