以可比较的方式用不同的单位表示时间范围

Representing Ranges of Time with Different Units in a Comparable Way

我有一些具有生命周期属性的事件对象。我有不同类型的事件,每个事件都有不同的生命周期和可能不同的单位(例如 4-10 小时、5-8 周、1 个月 - 2 年)。我想将这些范围存储为统一且可比较的数据类型,但我不确定我的最佳选择是什么。理想情况下,我希望能够浏览事件列表并找到所有可以持续 3 小时、1 周、2 个月等的事件。

您遇到的问题是比较相同 "substance"(即时间)但单位不同的值。这将是 value object. Value objects are not a common pattern in JavaScript, but they are no less applicable and are a great place for domain logic. This article 的一个很好的候选者,它很好地了解了将值对象与 JavaScript 结合使用。

  • 通过定义 JavaScript 函数创建 "class"。

  • 在其中,以您使用的最小单位(小时)存储寿命值。

  • 创建几个内部方法,这些方法将根据单位类型获取和设置此值(例如,将周数乘以 168 以获得小时数)。在获取这些单位时,您可能希望四舍五入到最接近的 week/month/year。

  • 创建方法以将小时值与另一个实例的小时值进行比较。

这将允许您独立于存储事件生命周期的时间单位来比较事件。