两个日期之间明显的一阶差异

时间:2019-03-27 21:00:23

标签: javascript typescript

某些背景:

我有数据点(当前日期+ 5天,以3小时为步长(例如22 pm、1am、4am、7am ...)),我想按日期对数组进行排序/分组(每个日期一个) )。

我的第一次尝试是简单地计算两个日期对象在日期之类的差异

(datapoint.getTime() - today.getTime())/ millisecondsPerDay。 那是行不通的,因为我只有几天的时间。

然后我在结果上使用了Math.ceil()Math.floor(),但是当然(我已经看了一段时间了,所以那时我的大脑没有意识到缺陷)也不起作用,因为它将把当天和第二天的一部分放在同一组中(下午22点+ 3小时不在同一天,尽管相差不到1天)。

然后我像做日比较

let diff = tmp.getDate() - today.getDate()

该方法的问题是,当我在月底并且日期点在接下来的几个月中时,我得到(相对)较高的负值,我不能将其用作数组索引(例如{ {1}}。

问题

在考虑月份变化时,如何计算不同日期的两个日期之间的差异?

1 个答案:

答案 0 :(得分:1)

如果您的日期以毫秒为单位,则可以尝试此操作。将两者除以(24 * 3600 * 1000)并取Math.floor()-这样就可以得到整天的时间。然后只需从今天的结果中减去目标结果即可。

所以

mils_in_a_day = 24 * 3600 * 1000
today_in_days = Math.floor(today_in_mils / mils_in_a_day)
target_date_in_days = Math.floor(target_date_in_days / mils_in_a_day)
difference_in_days = target_date_in_days - today_in_days

然后可以对每个示例进行排序

results = {}
results[difference_in_days] = target_date_in_days

并以这样的哈希结尾

{ 
  '1' : [12356, 123457, 123458], 
  '2' : [234567, 234568, 234569]
}

其中的键表示天数之差,值是原始时间戳记的数组。然后,您可以在每个数组上调用sort()以在几天之内对时间戳进行排序。

我确信这不是最有效的方法,但是应该可以给您带来启发。