如何比较 Luxon 中的持续时间或间隔?

Posted

技术标签:

【中文标题】如何比较 Luxon 中的持续时间或间隔?【英文标题】:How do I compare Durations or Intervals in Luxon? 【发布时间】:2021-12-17 07:35:13 【问题描述】:

我有一个 Interval[],我想知道哪个是最大的间隔。我认为将它们转换为持续时间然后进行比较可能会奏效,但我在 luxon 文档中找不到合适的方法,而且 Google 让我无处可去。

如何比较持续时间或间隔?谢谢!

【问题讨论】:

【参考方案1】:

一种方法是您可以将您拥有的日期转换为 ISO 字符串,然后使用 diff 来获得差异。 https://moment.github.io/luxon/#/math?id=diffs.

var end = DateTime.fromISO('2017-03-13');
var start = DateTime.fromISO('2017-02-13');

var diffInMonths = end.diff(start, 'months');
diffInMonths.toObject(); //=>  months: 1 

这就是他们在该文档中显示的示例。

您还可以将日期转换为 unix 时间戳并减去它们以获得差异,然后将其转换回日期。

如果您不知道“Luxon”是(现已弃用)“moment”包的改进包,这就是文档仍在使用 moment 的原因。

如果需要更多帮助,我想了解更多关于您到底在努力解决什么问题并查看您已经尝试过什么的信息。

【讨论】:

假设我有两个间隔——它们有一个开始和结束,可以做成一个持续时间。 const duration1 = interval[0].toDuration() 让我 3 小时 56 分钟。 const duration2 = interval[1].toDuration() 让我 3 小时 12 分钟。我如何比较 duration1 和 duration2 以获得更长的持续时间?或者您可以直接从 Interval 对象执行此操作吗? 您应该通读我提供给您的文档链接,它有一个关于“持续时间数学”的完整部分并显示了各种示例。但是你可以使用var dur = Duration.fromObject( months: 4, weeks: 2, days: 6 ),你可以使用dur.as('seconds') ,你可以根据你的需要使用1 hour = 60 * 60 * 1000 milliseconds,你可以很容易地减去或比较持续时间来找出天/毫秒/什么的差异。你可以使用let diff = interval1.diff(interval2, 'hours')之类的东西。 我已经阅读了文档,正如我在原始问题中提到的那样。我不知道知道两个持续时间之间有 44 分钟的差异如何告诉我哪个更长?除非有负持续时间这样的东西,它会返回一个。 如果你执行 a.diff(b) 并得到一个负数,那么 a 更长,如果你执行 a b.diff(a) 并得到一个负数,那么 b 更长,你可以交换他们的位置,看看哪个更长。【参考方案2】:

yourInterval.length() 将为您提供以毫秒为单位的间隔长度。所以你只需要找到结果最高的区间。

【讨论】:

以上是关于如何比较 Luxon 中的持续时间或间隔?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Luxon DateTime 格式转换为字符串或数字?

如何使用 Luxon 格式化时间(不是日期)?

隐藏luxon中的无效日期

如何在 Luxon 中使用 diff 方法

如何使用 Luxon 格式化日期?

如何向 NSDate 添加时间间隔?