gpt4 book ai didi

javascript - 是否有内置的方法来规范 Luxon 内的持续时间?

转载 作者:行者123 更新时间:2023-12-05 09:29:48 27 4
gpt4 key购买 nike

我正在从 Momentjs 迁移到 Luxon。我允许用户选择任务将花费的小时数。当我们保存这个值时,我希望它正常化。因此,如果一项任务需要 90 个小时,我更愿意存储 3 天 18 个小时。我存储了 ISO 持续时间字符串,所以我想将 PT90H 转换为 P3DT18H...当然可以使用任何给定值。

我试过 Luxon 的 normalize 函数,我试过这样调用它:

const duration = Duration.fromObject({ hours: 90 });
duration.normalize().toISO();

但是,normalize 似乎对结果没有任何作用。我仍然得到 PT90H。 Luxon 是否有内置的方法来做到这一点?

最佳答案

Durtation.normalize()不会向 Duration 对象添加属性,因此您需要提供您希望它标准化的单位。 (这对我来说很奇怪,但提供了对结果的隐式控制)。

normalize() – Reduce this Duration to its canonical representation in its current units.

const duration = Duration
.fromObject({ days: 0, hours: 90 })
.normalize()
.toISO();

console.log(duration);
<script src="https://cdnjs.cloudflare.com/ajax/libs/luxon/2.2.0/luxon.min.js"></script>
<script>const { Duration } = luxon;</script>

或者您可以使用 Duration.shiftTo()明确地将持续时间强制为特定单位。

const duration = Duration
.fromObject({hours: 90 })
.shiftTo('days', 'hours')
.toISO();

console.log(duration);
<script src="https://cdnjs.cloudflare.com/ajax/libs/luxon/2.2.0/luxon.min.js"></script>
<script>const { Duration } = luxon;</script>


如果您知道您总是想要标准化为所有单位,您可以声明一个实用程序来返回一个用所有单位初始化的 Duration 对象。

function createDuration(duration) {
return Duration.fromObject(
Object.assign(
{ years: 0, months: 0, weeks: 0, days: 0, hours: 0, minutes: 0, seconds: 0, milliseconds: 0 },
duration
)
);
}

const duration = createDuration({ hours: 90, minutes: 3004 }).normalize().toISO();

console.log(duration);
<script src="https://cdnjs.cloudflare.com/ajax/libs/luxon/2.2.0/luxon.min.js"></script>
<script>const { Duration } = luxon;</script>

关于javascript - 是否有内置的方法来规范 Luxon 内的持续时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70349660/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com