某些背景:
我有数据点(当前日期+ 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}}。
问题
在考虑月份变化时,如何计算不同日期的两个日期之间的差异?
答案 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()
以在几天之内对时间戳进行排序。
我确信这不是最有效的方法,但是应该可以给您带来启发。